Linux上C++多线程报错解决办法

pthread报错

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <thread>
using namespce std;

void hello(){
cout << "hello concurent world!";
}

int main (int argc, char * argv[]){
thread t(hello);
t.join();
return 0;
}

这个小例子直接用make编译是无法通过的。报错如下:

1
2
3
4
5
/tmp/ccYB66pt.o:在函数‘std::thread::thread<void (&)()>(void (&)())’中:
1-1.cpp:(.text._ZNSt6threadC2IRFvvEJEEEOT_DpOT0_[_ZNSt6threadC5IRFvvEJEEEOT_DpOT0_]+0x21):对‘pthread_create’未定义的引用
collect2: 错误:ld 返回 1
<builtin>: recipe for target '1-1' failed
make: *** [1-1] Error 1

解决方法是在编译的时候加上 -lpthread 参数。这个类用到posix实现的线程了。

1
2
g++ -o test test.cpp -lpthread
./test

结果输出:

1
hello concurent world!

参考

  1. c++使用thread类时编译出错,对‘pthread_create’未定义的引用