对使用-pthread&编译的pthread_wait的未定义引用-lpthread

时间:2014-08-13 04:46:49

标签: c gcc compilation pthreads

我收到以下错误:

assign4.o: In function `main':
assign4.c:(.text+0x76f): undefined reference to `pthread_broadcast'
assign4.o: In function `threadFunc':
assign4.c:(.text+0x15fd): undefined reference to `pthread_wait'
assign4.c:(.text+0x17f3): undefined reference to `pthread_wait'
collect2: ld returned 1 exit status

编译时使用:

gcc -pthread assign4.c -o assign4 -lm

gcc assign4.c -o assign4 -lm -lpthread

这是对pthread_broadcast的调用:

while (killCount < numThreads) {
    while (waitCount < numThreads);
    waitCount = 0;
    pthread_broadcast();
}

对pthread_wait的调用:

pthread_wait();
for (i = 0; i < partInfo.groupSize; i++) {  
    for (j = 0; j < numParts; j++) {
        gravitation(bodies[i], parts[i]);
    }
}
if (pthread_mutex_lock(&mtx) != 0) {
    printf("Error locking mutex.\n");
    return -1;
}
waitCount++;
if (pthread_mutex_unlock(&mtx) != 0) {
    printf("Error unlocking mutex.\n");
    return -1;
}
pthread_wait();
if (pthread_mutex_lock(&mtx) != 0) {
    printf("Error locking mutex.\n");
    return -1;
}

正如您所看到的,我尝试使用-pthread和-lpthread进行编译,但它只是无法正常工作。我认为它必须是一个非常明显的东西,我错过了,但我无法弄清楚是什么。

提前谢谢!

3 个答案:

答案 0 :(得分:3)

没有名为pthread_wait()的功能,可能是pthread_cond_wait()。这就是您收到链接器错误的原因。当链接器无法找到函数定义时,它将给出undefined reference to错误。所以你得到了

assign4.c:(.text+0x15fd): undefined reference to `pthread_wait'
assign4.c:(.text+0x17f3): undefined reference to `pthread_wait'

我认为pthread_broadcast()也有同样的错误,应该是pthread_cond_broadcast()

答案 1 :(得分:1)

您确定不是在寻找pthread_cond_broadcastpthread_cond_wait吗?

似乎不是任何pthread_waitpthread_broadcast函数,尤其不是不带参数的函数。

答案 2 :(得分:0)

如果你想在线程内等待一段时间,你可以尝试使用sleep();并提供秒数作为参数。如果这不起作用,那么试试pthread_cond_wait(); 您可以参考pthread tutorials

并且是抛出编译错误,因为没有像pthread_wait()这样的函数。