用g ++编译multithreading代码

我有最简单的代码:

#include <iostream> #include <thread> void worker() { std::cout << "another thread"; } int main() { std::thread t(worker); std::cout << "main thread" << std::endl; t.join(); return 0; } 

尽pipe我仍然不能用g++编译运行。

更多细节:

 $ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

编译命令:

 $ g++ main.cpp -o main.out -pthread -std=c++11 

运行:

 $ ./main.out terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted Aborted (core dumped) 

而现在我陷入了困境。 在互联网上的每一个相关的线程,build议添加-pthread而我已经有了。

我究竟做错了什么?

PS:这是一个全新的Ubuntu 13.10安装。 只有g++软件包被安装,并且还有一些小东西,如chromium等等

PPS:

 $ ldd ./a.out linux-vdso.so.1 => (0x00007fff29fc1000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb85397d000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb853767000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb85339e000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb85309a000) /lib64/ld-linux-x86-64.so.2 (0x00007fb853c96000) 

PPPS:与clang++ (V3.2)它编译和运行良好

PPPPS:家伙,这不是重复什么是在Linux下的GCC使用std ::线程的正确链接选项?

PPPPPS:

 $ dpkg --get-selections | grep 'libc.*dev' libc-dev-bin install libc6-dev:amd64 install libclang-common-dev install linux-libc-dev:amd64 install 

答案是由一个SO C ++聊天类成员提供的。

看起来这个行为是由gcc中的一个bug造成的。

该错误讨论的最后评论中提供的解决方法可以解决问题:

 -Wl,--no-as-needed 

添加-lpthread为我解决了相同的问题:

  g++ -std=c++11 foo.cpp -lpthread -o foo 

答案已经为qtcreator做了:

 LIBS += -pthread QMAKE_CXXFLAGS += -pthread QMAKE_CXXFLAGS += -std=c++11 

对于控制台g ++: 这里

 g++ -c main.cpp -pthread -std=c++11 // generate target object file g++ main.o -o main.out -pthread -std=c++11 // link to target binary 

我有稍微更高级的版本(4.8.4而不是4.8.1),我testing了上面的所有三个答案。 事实上:

单独的工作:

g ++ -std = c ++ 11 -o main -pthread main.cpp

-Wl,--no-as-needed单独不需要的不起作用

单独的-lpthread 不起作用

-Wl,--no-as-needed-lpthread 一起工作:

g ++ -std = c ++ 11 -o main -Wl, – 不需要main.cpp -lpthread

我的版本是“g ++(Ubuntu 4.8.4-2ubuntu1〜14.04.1)4.8.4”。