未定义对pthread创建的引用,即使使用lpthread

时间:2018-09-24 01:48:10

标签: c++ linker g++ pthreads

我想利用frozenset广告,因此使用pthread标志进行编译,但这是我得到的:

-lpthread

我尝试编译的代码如下:

$ g++ -lpthread pseudo_code.cpp 
/tmp/cc3mPrvt.o: In function `MyThreadClass::StartInternalThread()':
pseudo_code.cpp:(.text._ZN13MyThreadClass19StartInternalThreadEv[_ZN13MyThreadClass19StartInternalThreadEv]+0x26): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

2 个答案:

答案 0 :(得分:1)

可能您需要这样做:

extern "C" {
#include <pthread.h>
}

这告诉编译器此标头用于C库,并且不应使用C ++名称修饰。

您还需要使用-pthread而不是-lpthread,因为pthread库是特殊的,并且GCC希望明确地知道您正在尝试使用线程,而不仅仅是链接到libpthread。

答案 1 :(得分:0)

请尝试使用该命令进行编译。

g++ pseudo_code.cpp -lpthread
  

在命令中写入此选项的位置有所不同;的   链接器按顺序搜索和处理库和目标文件   他们被指定。因此,foo.o -lz bar.o在之后搜索库z   文件foo.o但在bar.o之前。如果bar.o引用z中的函数,则那些   函数可能无法加载。

对我有用。似乎需要在源文件之后指定库,以便在库中搜索符号。