【发布时间】:2011-12-23 04:08:08
【问题描述】:
在使用gcc 时,我在放置-l 选项时遇到了一些问题。这是重现问题的精简版。
t.c:
#include <pthread.h>
int main() {
pthread_create(0, 0, 0, 0);
}
在终端:
$ gcc -lpthread t.c
/tmp/ccmkwV7B.o: In function `main':
t.c:(.text+0x29): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
$ gcc t.c -lpthread
$ (compiles ok)
为什么我必须把-lpthread放在最后才能让它工作?而且似乎这个问题只发生在 32bit linux 上。
我的环境信息附在下面:gcc -lpthread t.c 在这台机器上失败。
$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
$ uname -rm
3.0.0-12-generic i686
gcc -lpthread t.c 在这台机器上工作。
$ uname -rm
2.6.18-274.3.1.el5 x86_64
$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51)
我查阅了 gcc 手册,上面说“-l 的位置很重要”。究竟是什么意思?
【问题讨论】:
-
这主要取决于链接器。如果你可以为这两个系统做
ld --version,那可能会更有启发性。