什么是在Linux下的GCC使用std :: thread的正确链接选项?

您好我正在尝试使用G ++的std::thread 。 这是我的testing代码

 #include <thread> #include <iostream> int main(int, char **){ std::thread tt([](){ std::cout<<"Thread!"<<std::endl; }); tt.join(); } 

它编译,但是当我尝试运行它的结果是:

 terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted 

我的编译器版本:

 $ g++ --version g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 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. 

我的testing代码有什么问题?

更新:我使用下面的命令行来编译和运行我的代码。

 $ g++ -std=c++0x test.cpp $ ./a.out 

我尝试了

 $ g++ -std=c++0x -lpthread test.cpp $ ./a.out 

还是一样。

更新:下面的编译命令工作。

 $ g++ -std=c++0x test.cpp -lpthread $ ./a.out Thread! 

我想在Linux上,pthread是用来实现std::thread所以你需要指定-pthread编译选项。

由于这是一个链接选项,这个编译器选项需要在源文件之后:

 $ g++ -std=c++0x test.cpp -pthread 

除了使用-std=c++0x-pthread不能使用-static

-std=c++11 -static -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive-static一起工作!!!

看到这里: https : //gcc.gnu.org/bugzilla/show_bug.cgi?id=52590#c4

下面是一个简单的cmake文件,用于编译使用线程的简单C ++ 11程序(debugging版本):

的CMakeLists.txt:

 cmake_minimum_required(VERSION 2.8) list(APPEND CMAKE_CXX_FLAGS "-pthread -std=c++11 ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs") add_executable(main main.cpp) 

build立它的一个方法是:

 mkdir build cd build cmake .. && make 

尝试在单个命令中编译这种方式:

 g++ your_prog.cpp -o your_output_binary -lpthread -std=gnu++11 

你也可以试试C ++ 11而不是gnu ++ 11。 希望这个作品。

用这个:

 g++ -std=c++11 -pthread ***