gcc的-lpthread选项

时间:2012-02-17 16:24:15

标签: gcc pthreads

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

提前致谢。

6 个答案:

答案 0 :(得分:19)

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

您包含标头pthread.h,以便编译器了解数据类型&符号名称,您在源文件中使用但在pthread库头文件中定义/声明。

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

因为GCC不会执行由标头包含触发的auto-linking库(与MSVC相反,或者我被告知)。

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

相关问题