为什么需要“ -lpthread”?

Tar*_*ikH 4 c gcc compilation pthreads

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

为什么此命令起作用:

gcc -o name name.c -lpthread
Run Code Online (Sandbox Code Playgroud)

但这不会:

gcc -o name name.c
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*tye 7

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

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

如果您不包括标志-l或不包含标志-libLIBRARY_NAME则将无法使用外部库。

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

undefined reference to `pthread_create'

undefined reference to `pthread_join'
Run Code Online (Sandbox Code Playgroud)


dbu*_*ush 5

这些-l选项告诉链接器在指定的外部库中进行链接,在本例中为 pthread 库。

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

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