【发布时间】: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,我每天都能学到新东西。 :)