Quelles sont les options de lien correctes pour utiliser std :: thread dans GCC sous linux?

Bonjour, j’essaie d’utiliser std::thread avec G ++. Voici mon code de test

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

Il comstack, mais quand j’essaie de l’exécuter le résultat est:

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

Ma version du compilateur:

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

Quel est le problème avec mon code de test?

MISE À JOUR: J’utilise la ligne de commande suivante pour comstackr et exécuter mon code.

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

et j’ai essayé

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

Toujours le même.

UPDATE: la commande de compilation suivante fonctionne.

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

Je pense que sous Linux, pthread est utilisé pour implémenter std::thread . Vous devez donc spécifier l’option de compilation -pthread .

Comme il s’agit d’une option de liaison, cette option du compilateur doit être APRÈS les fichiers source:

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

En plus d’utiliser -std=c++0x et -pthread vous ne devez pas utiliser -static .

-std=c++11 -static -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive complète ne fonctionne avec -static !!!

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

Voici un simple fichier CMake pour comstackr un programme C ++ 11 qui utilise des 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) 

Une façon de le construire est la suivante:

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

Essayez de comstackr de cette manière en une seule commande:

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

Vous pouvez également essayer C ++ 11 au lieu de gnu ++ 11. J’espère que cela fonctionne.

Utilisez ceci:

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