对于以下用c ++ 11和c ++ 14编写的代码
#include <iostream>
#include <vector>
#include <future>
using namespace std;
int main()
{
vector < future<int> > futures;
for(int i =0; i<10; i++)
{
futures.push_back( async([](auto j){return j*2;} ,i));
}
for(auto &e : futures)
{
cout << e.get() << endl;
}
return 1;
}
我收到以下错误:
/tmp/ccO0BfSt.o:在函数`_ZNSt6threadC2IZNSt13__future_base17_Async_state_implISt12_Bind_simpleIFZ4mainEUliE_iEIiEC4EOS6_EUlvE_IEEEOT_DpOT0 _&#39;:c14_features.cpp :(。text + 0x1d92):未定义引用`pthread_create&#39; collect2:错误:ld返回1退出状态
知道为什么我会这么做吗?
答案 0 :(得分:2)
GCC的C ++ 11线程库建立在本机线程支持之上,通常意味着Pthreads。要使用Pthreads函数,需要链接到libpthread,因此将-pthread
添加到编译器和链接器命令中。
N.B。从技术上讲,这不是编译错误,而是链接错误。该文件编译正常,但无法链接,因为程序中没有提供pthread_create
函数。该函数由libpthread提供,因此您需要链接到它。