为什么需要“ -lpthread”?

时间:2019-11-26 14:53:02

标签: c gcc compilation pthreads

所以我的问题是:为什么在编译命令末尾需要“ -lpthread”?

此命令为什么起作用:

gcc -o name name.c -lpthread

但这不会:

gcc -o name name.c

我在我的C代码中使用了pthread.h库。
我已经在网上寻找一些答案,但没有真正找到可以理解的答案

2 个答案:

答案 0 :(得分:7)

pthread.h不是一个库它只是一个头文件,它为您提供了将用于多线程的函数的声明(不是函数的实际主体)。 / p>

在编译时使用-libpthread-lpthread实际上将GCC库pthread与您的代码链接。因此,编译器标志-libLIBRARY_NAME-lLIBRARY_NAME是必不可少的。

如果您没有在-l中包含标志-libLIBRARY_NAME,则将无法使用外部库。

在这种情况下,假设您正在使用函数pthread_createpthread_join,那么您会得到一条错误消息:

undefined reference to `pthread_create'

undefined reference to `pthread_join'

答案 1 :(得分:4)

-l选项告诉链接器链接到指定的外部库(在本例中为pthread库)。

包含pthread.h允许您在代码中使用pthread库中的函数。但是,与在studio.h或stdlib.h之类的地方声明的函数不同,pthread.h中的函数的实际代码默认情况下未链接。

因此,如果您使用该库中的函数而无法使用-lpthread,则链接阶段将失败,因为它将无法在库中找到诸如pthread_create之类的函数。