在c ++中使用pthread

时间:2010-04-21 02:15:41

标签: c++ linker pthreads linker-errors

我在pthread.h文件中使用*.cc。当我尝试使用pthread_exit(0);pthread_join(mythrds[yy],NULL);时,它会说:

.cc:(.text+0x3e): undefined reference to `pthread_exit'

当使用gcc在*.c文件中编写非常相似的代码时,它可以完美运行。我怎样才能在c ++中使用pthread ..(我还添加了-lpthread)

..
void *myThreads ( void *ptr )
{
...
pthread_exit(0); 
}
..

国旗:

g++ -lpthread -Wall -static -W -O9 -funroll-all-loops -finline -ffast-math

2 个答案:

答案 0 :(得分:27)

您可以尝试使用-pthread选项来使用g ++。

   -pthread
       Adds support for multithreading with the pthreads library.  This
       option sets flags for both the preprocessor and linker.

答案 1 :(得分:1)

你的pthread头文件是否在函数原型周围有extern "C" { ... }?这是链接器无法在C ++中链接的常见情况。

之所以发生这种情况是因为C ++通常会进行名称修改,以便它可以将参数详细信息编码为符号(允许多态)。例如,函数:

void x(int);
void x(void);
void x(char,int,float,double);

都获得不同的链接符号。

如果头文件extern "C" { ... },您可能需要自己动手:

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

希望这会奏效。