我收到以下错误:
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进行编译,但它只是无法正常工作。我认为它必须是一个非常明显的东西,我错过了,但我无法弄清楚是什么。
提前谢谢!
答案 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_broadcast
和pthread_cond_wait
吗?
似乎不是任何pthread_wait
和pthread_broadcast
函数,尤其不是不带参数的函数。
答案 2 :(得分:0)
如果你想在线程内等待一段时间,你可以尝试使用sleep();并提供秒数作为参数。如果这不起作用,那么试试pthread_cond_wait(); 您可以参考pthread tutorials
并且是抛出编译错误,因为没有像pthread_wait()这样的函数。