-lpthread option of gcc



正如我所知,如果我想在linux环境中使用pthread库,我必须包含pthread.h并使用-lpthread选项编译源代码。但我不明白为什么我应该使用-lpthread选项进行编译。我认为这个选项是多余的。。。因为我已经声明包含pthread.h头文件,以便gcc链接pthread库。为什么gcc不通过读取#include自动链接pthread库文件?

提前谢谢。

好的链接编译是两个独立的阶段。

您包括头CCD_ 1,以便编译器理解数据类型&符号名称,在源文件中使用,但在pthread库头文件中定义/声明。

使用-lpthread链接到pthread库,这样链接器就可以在链接阶段在pthread中找到这些符号。

在代码中包含#include <pthread.h>不会链接到库中;它只包括用于编译的头。这允许编译器查看包含的各种结构、函数声明等。具有-lpthread实际上导致链接由链接器完成。所以include告诉编译器什么是可用的,而-lpthread实际上允许程序在运行时调用库中的函数。

因为GCC不自动链接由头包含触发的库(与MSVC相反,或者我已经被告知)。

头文件只是声明pthread函数是什么以及应该如何调用它们。-lpthread链接到库本身,包含实际函数。

编译器不知道如何解析pthread.h中的函数。你可能想使用一个静态库,系统提供的库,一些兼容的实现——见鬼,你可以在另一个源文件中自己实现它们。这取决于链接器,与编译器无关。

通过包含头文件,您可以告诉编译器他将看到哪些函数。但是,如果这些函数在外部库中,如pthread函数,则需要将该库链接到程序,以便程序能够实际访问这些函数。这就是-lpthread正在做的。

Pthread.h头文件包含在posix线程程序中,但您需要pthread.h0,因为它将其与pthread的库链接注意:-lpthread-lpcap都是带有gcc编译器的开关,可以链接我们源代码中的特定库。(lpthread表示"链接pthread"库)

最新更新