我已使用T
撰写了以下pthread
课程。当我使用g ++ -lpthread编译这个类时,它工作正常。但是如果我从另一个类A
扩展这个类并一起编译它会返回一个错误; “对pthread_cancel的未定义引用”
代码:
class T{
private:
pthread_t thread;
public:
void start(){
pthread_create(&thread,NULL,&run,this);
}
void destroy_thread(){
pthread_cancel(thread);
}
static void* run(void*){}
~Thread(){
destroy_thread();
}
};
下一课:
class A:T{
A(){
start();
}
}
主要
int main(){
A a;
return 0;
}
编译:
g++ -c T.cpp A.cpp Main.cpp -lpthread
g++ -o out *.o
错误: 对'pthread_cancel'的未定义引用
答案 0 :(得分:11)
请改为:
g++ -pthread -c T.cpp A.cpp Main.cpp
g++ -pthread -o out *.o
-lpthread
是一个链接器标志,只有在链接时才使用,而不是编译,所以在你拥有它的地方是不正确的 - 链接部分发生在第二步。
并且通常不会使用-lpthread
。使用-pthread
进行编译和链接。
从GCC手册:
使用pthreads库添加对多线程的支持。此选项为预处理器和链接器设置标志。