对'pthread_cancel'的未定义引用

时间:2014-05-26 12:30:39

标签: c++ g++ pthreads

我已使用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'的未定义引用

1 个答案:

答案 0 :(得分:11)

请改为:

g++ -pthread -c T.cpp A.cpp Main.cpp
g++ -pthread -o out *.o

-lpthread是一个链接器标志,只有在链接时才使用,而不是编译,所以在你拥有它的地方是不正确的 - 链接部分发生在第二步。

并且通常不会使用-lpthread。使用-pthread进行编译和链接。

从GCC手册:

  

使用pthreads库添加对多线程的支持。此选项为预处理器和链接器设置标志。