这项工作:
gcc a.o b.o -o a -lpthread
这不起作用:
gcc -lpthread a.o b.o -o a
并显示如下错误:
undefined reference to `pthread_create'
因此,当我使用Makefile进行编译时,它会生成
gcc -lpthread a.o b.o -o a
哪个不起作用。
有任何想法吗?
PS:我正在使用gcc 4.6.3/Ubuntu 12.04
最佳答案
首先,在使用pthread进行编译时,您要使用-pthread
而不是-lpthread
--pthread
可能会启用程序在多线程环境中运行所需的一些编译时选项。
问题实际上与您的命令行无关,而是GNU ld
的问题。 GNU ld
在遇到-lXXX
选项时,读取libXXX.so
或libXXX.a
定义的所有符号,检查在命令行中-lXXX
选项之前指定的文件中是否提到了这些符号,而忽略了其余的符号符号。
换句话说:目标文件和库的命令行顺序会更改链接器的行为。
当计算机的内存确实有限时,这可能是合理的,但如今,它只是很长一段时间以来被遗忘的傻东西,应该早就已经解决了。
当然,可能会出现与定义相同符号的多个库链接的问题,但是肯定有更聪明的方法来允许此类情况的预期行为。
底线:对于GNU ld
(由gcc
调用),只有问题中的第一个命令才有效,因为ld
仍然存在于先前的计算时代。
为了更加合理,在链接和编译与pthread相关的程序时,请同时使用-pthread
。
关于gcc - 编译错误gcc -lpthread位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731220/