【问题标题】:How to solve undefined references in C when linking with an external library that uses name space?与使用名称空间的外部库链接时,如何解决 C 中未定义的引用?
【发布时间】:2014-08-06 06:17:36
【问题描述】:

我正在将我的程序链接到一个外部静态库。

这是我看到的众多错误之一:

undefined reference to `tcp_outratectl_tmofactor'

这在外部库c文件中定义为:

int tcp_outratectl_tmofactor = 1;

这个在我的程序中使用如图:

/* This is just a snippet */
extern int tcp_outratectl_timerticks;
if (count) {
    tcp_outratectl_timerticks = *count;
}

我从库中提取了目标文件并尝试查找符号

$ nm -A ./*.o | grep tcp_outratectl_timerticks
./tcp_timer.o:0000000000000018 B rumpns_tcp_outratectl_timerticks
./tcp_usrreq.o:                 U rumpns_tcp_outratectl_timerticks

如您所见,tcp_outratectl_tmofactor 是一个全局 BSS 符号,但它后面有“rumpns_”前缀,这会导致链接器错误。

我该如何解决这个问题?

【问题讨论】:

  • 你链接的是 C 还是 C++?
  • 我正在链接 C
  • 这很奇怪,我以为 C 不会做任何类型的名称修改。
  • @merlin2011,C 有一些修饰方案,至少对于函数来说,以区分不同的调用约定。
  • @EricZ,我每天都能学到新东西。 :)

标签: c linker


【解决方案1】:

我正在使用的外部库在还不是其命名空间一部分的符号后面添加了“rumpns_”。

修改 makefile 以删除此行为对我有用

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 2016-04-28
    • 2013-05-16
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2015-01-24
    • 2015-05-13
    相关资源
    最近更新 更多