【发布时间】:2013-06-17 12:40:39
【问题描述】:
我有这个简单的c-code
当我链接它时它工作正常
gcc -g app.c.o -o app -lrt -lpthread -lc
但是如果我们改变链接 libc 和 libthread 的顺序
gcc -g app.c.o -o app -lrt -lc -lpthread
它不起作用。
我们知道在 FreeBSD 上,libc 中 pthread 函数的存根是弱引用。 例如
objdump -T /lib/libc.so.7 | grep pthread_cond_signal
00000000000e2bf0 w DF .text 0000000000000011 FBSD_1.0 pthread_cond_signal
这意味着链接的顺序无关紧要。为什么会这样?
【问题讨论】:
-
我发现了同样的问题lists.freebsd.org/pipermail/freebsd-hackers/2011-April/…,但我不明白为什么链接器选择 libc 的 fork,而不是 libthr。 fork 也是弱引用。
标签: gcc linker pthreads freebsd libc