1

我正在编写有关死锁及其检测的代码,我在 64 位 Ubuntu 12.10 上使用 eclipse Juno C/C++。问题是当我使用

睡觉(1)

,我明白了

sleep 未在此范围内声明

当我构建项目时,我试图包括

包括 <unistd.h>

,但是所有的 pthread 函数都像

pthread_join

给我这样的错误

对 pthread_join 的未定义引用

,没有#include < unistd.h>这样的错误不会出现。

示例代码:

#include <unistd.h>
#include <iostream>
#include <semaphore.h>
#include <queue>
#include <stdlib.h>

using namespace std;

pthread_mutex_t mutex;
sem_t sem; //used for writing in the console

.......

void cross(Batman b) {
// code to check traffic from the right, use counters, condition
sem_wait(&sem);
cout << "BAT " << b.num << " from " << b.direction << " crossing" << endl;
sem_post(&sem);
sleep(1);
}
........

ps我按照这些说明让pthreads在其他项目中工作,我对这个项目做了同样的事情 http://blog.asteriosk.gr/2009/02/15/adding-pthread-to-eclipse-for-using-posix-线程/

ps 我正在和一个朋友一起做这个项目,我使用了他使用的相同代码,但仍然出现这些错误,而他没有

4

2 回答 2

1

当您#include < unistd.h>修复睡眠功能查找问题时,现在您遇到了 pthread 库问题。

接下来,您需要#include <pthread.h>将您的应用程序与 pthread 库链接

于 2012-11-27T02:07:28.860 回答
0

听起来你有两个不同的错误,

firstsleep()是未定义的,因为您忘记包含 unistd.h。我还会包含 pthread.h 但听起来它可能会被您包含的标题之一拉入。

其次,听起来您添加了链接器错误,您可以使用 -pthread 编译或将 -lpthread 添加到链接器。它没有显示的原因是因为只有在文件编译后才能进行链接,并且第一个错误阻止了它。我敢打赌 ld 出于某种原因不喜欢 -pthread (你安装了 libpthread-dev 吗?)。您可以尝试将 -pthread 更改为 -lpthread。

于 2012-11-27T02:12:03.003 回答