编译错误gcc -lpthread位置

问题描述 投票:0回答:1

这部作品:

    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

这不起作用。

有什么想法吗?

P.S:我使用的是 gcc 4.6.3/Ubuntu 12.04

gcc compiler-errors linker position
1个回答
2
投票

首先,当使用 pthread 进行编译时,您要使用

-pthread
,而不是
-lpthread
-
-pthread
可能会启用程序在多线程环境中工作所需的一些编译时选项。

问题并不在于你的命令行 - 这是 GNU

ld
的问题。 GNU
ld
,在遇到
-lXXX
选项时,读取由
libXXX.so
libXXX.a
定义的所有符号,检查在 -lXXX
 选项之前指定的文件 
中是否提到了这些符号。命令行
,并且忘记了其余的符号。

换句话说:目标文件和库的命令行顺序会改变链接器的行为。

当计算机的内存非常有限时,这可能是合理的,但现在它只是一个来自早已被遗忘的时代的愚蠢的工件,应该在不久前就已经修复了。

当然,与定义相同符号的多个库链接可能会出现问题,但肯定有更明智的方法来允许这种情况下的预期行为。


底线:对于GNU

ld
(由
gcc
调用),只有你问题中的第一个命令是有效的,因为
ld
仍然生活在以前的计算时代。

为了更加理智,请在链接

编译 pthread 相关程序时使用 -pthread

© www.soinside.com 2019 - 2024. All rights reserved.