Salut, j'essaye d'utiliser std::thread
avec G ++. Voici mon code de test
#include <thread>
#include <iostream>
int main(int, char **){
std::thread tt([](){ std::cout<<"Thread!"<<std::endl; });
tt.join();
}
Il compile, mais lorsque j'essaye 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 de 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 compiler 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.
c++
multithreading
g++
c++11
Moteur de la Terre
la source
la source
glibc
a des stubs à ne rien faire pour de nombreuses fonctions pthread.-lpthread
doit suivre le fichier source.Réponses:
Je pense que sur Linux, pthread est utilisé pour implémenter
std::thread
, vous devez donc spécifier l'-pthread
option du compilateur.Comme il s'agit d'une option de liaison, cette option du compilateur doit être APRÈS les fichiers source:
la source
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
résout le problème, non-pthread
. Ceci est un problème de lien Lien Selon ceman gcc
-pthread
n'est que des options g ++ qui ajoutent un support multithreading qui définit des indicateurs à la fois pour le préprocesseur et l'éditeur de liensEn plus d'utiliser
-std=c++0x
et-pthread
vous ne devez pas utiliser-static
.la source
-std=c++11 -static -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
travaille avec-static
!!!Voir ici: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590#c4
la source
--whole-archive
. J'ai trouvé qu'une autre réponse pour la liaison statique fonctionne pour moi sur OpenWRTVoici un simple fichier CMake pour compiler un programme C ++ 11 qui utilise des threads:
CMakeLists.txt:
Une façon de le construire est:
la source
Essayez de compiler de cette façon en une seule commande:
Vous pouvez également essayer C ++ 11 au lieu de gnu ++ 11. J'espère que cela fonctionne.
la source