编译 -lpthread 时没有引用 pthread_mutex_lock

aas*_*rms 3 c mutex pthreads linker-errors undefined-reference

我正在编译一个包含来自 pthread 库的互斥信号量的程序,但是当我使用 -lpthread 标志进行编译时,我收到了未定义的引用错误。

gcc -lpthread prodcon.c
/tmp/ccESOlOn.o: In function `producer':
prodcon.c:(.text+0x2e): undefined reference to `pthead_mutex_lock'
prodcon.c:(.text+0xd6): undefined reference to `pthead_mutex_unlock'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

互斥锁的语法如下:

pthread_mutex_t mutex1;
Run Code Online (Sandbox Code Playgroud)

是一个全局声明,以便它可以被多个线程使用。在函数中,我像这样调用互斥体:

pthead_mutex_lock(&mutex1);
pthead_mutex_unlock(&mutex1);
Run Code Online (Sandbox Code Playgroud)

但我收到编译器错误,我也尝试使用 -pthread 标志进行编译

gcc -pthread prodcon.c
/tmp/cc6wiQPR.o: In function `producer':
prodcon.c:(.text+0x2e): undefined reference to `pthead_mutex_lock'
prodcon.c:(.text+0xd6): undefined reference to `pthead_mutex_unlock'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我已经寻找答案,但我不知所措,并且希望能够帮助您弄清楚当我链接到包含互斥锁的库时为什么它有未定义的引用。

alk*_*alk 5

顺序很重要,所以使用:

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

或更好:

gcc -Wall -Wextra -pedantic -pthread prodcon.c -lpthread
Run Code Online (Sandbox Code Playgroud)

你确定你用吗pthead_mutex_lock?或者这是一个错字?无论如何应该如此pthread_mutex_lock。对于 也一样pthread_mutex_unlock