什么是在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 ***