gcc的-lpthread选项

sky*_*sky 10 gcc pthreads

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

提前致谢.

Alo*_*ave 19

以及连接汇编是两个独立的阶段.

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

您链接到pthread libray -lpthread使链接器可以在链接阶段实际在pthread库中找到这些符号.

  • 那么,当我们使用strcpy或printf时,为什么我们不必明确地包含一些库用于链接?是因为这些都在C标准库中并且默认包含在内,并且该库外的任何内容都必须明确链接? (2认同)

Dan*_*ego 5

#include <pthread.h>在你的代码库没有链接; 它仅包含用于编译的标头。这使编译器可以查看包含的各种结构,函数声明等。有-lpthread实际上导致链接器进行链接。因此,include告诉编译器可用的内容,并且-lpthread实际上允许程序在运行时调用库中的函数。