c ++ 11将来的编译错误

时间:2015-09-02 15:43:22

标签: c++ compilation future

对于以下用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退出状态

知道为什么我会这么做吗?

1 个答案:

答案 0 :(得分:2)

GCC的C ++ 11线程库建立在本机线程支持之上,通常意味着Pthreads。要使用Pthreads函数,需要链接到libpthread,因此将-pthread添加到编译器和链接器命令中。

N.B。从技术上讲,这不是编译错误,而是链接错误。该文件编译正常,但无法链接,因为程序中没有提供pthread_create函数。该函数由libpthread提供,因此您需要链接到它。