Quais são as opções de link corretas para usar o std :: thread no GCC no linux?

Oi eu estou tentando usar std::thread com G + +. Aqui está meu código de teste

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

Ele compila, mas quando tento executá-lo, o resultado é:

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

Minha versão do compilador:

 $ 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. 

O que há de errado com o meu código de teste?

ATUALIZAÇÃO: Eu uso a seguinte linha de comando para compilar e executar meu código.

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

e eu tentei

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

ainda o mesmo.

UPDATE: o seguinte comando de compilation funciona.

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

   

Eu acho que no Linux pthread é usado para implementar std::thread então você precisa especificar a opção de compilador -pthread .

Como esta é uma opção de vinculação, esta opção de compilador precisa ser APÓS os arquivos de origem:

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

Além de usar -std=c++0x e -pthread você não deve usar -static .

-std=c++11 -static -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive funciona em conjunto com -static !!!

Veja aqui: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590#c4

Aqui está um arquivo CMake simples para compilar um programa C ++ 11 que usa threads:

CMakeLists.txt:

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

Uma maneira de construí-lo é:

 mkdir -p build cd build cmake .. && make 

Tente compilar desta maneira em um único comando:

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

Você também pode tentar o C ++ 11 em vez do gnu ++ 11. Espero que isso funcione.

Usa isto:

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