Comment faire de la CDT/Eclipse travailler avec C++11 fils?

J'ai essayé de tester un exemple de C++11 fils dans Eclipse. Mais j'ai eu ce message lors de l'exécution du programme:

résilier appelé après avoir jeté une instance de 'std::system_error'
quel (le): Opération non permise'

Mon système: ubuntu + gcc 4.7

Programme:

#include <iostream>
#include <thread>

void worker()
{
    std::cout << "hello from worker" << std::endl;
}

int main(int argc, char **argv)
{
    std::thread t(worker);
    t.join();
}

...et oui, j'ai mis -std=c++11 et -pthread à l'intérieur de C/C++ Build -> Settings -> Tool Settings -> Cross G++ Compiler -> Miscellaneous -> Other Flags.

Des commentaires?

Semble étrange de mettre ces paramètres dans un "cross compilateur" (mais je ne sais pas Eclipse). Le crash est répétable si le -pthread drapeau n'est pas présent sur la ligne de commande et que vous avez d'autres versions de libstdc++ est installé. Donc, assurez-vous que le drapeau est vraiment passé à votre compilateur
C'est une exception d'exécution, de sorte que le code compile correctement. Encore, je ne comprends pas les cas dans lesquels cette exception message doit se produire...
cette erreur arrive si vous link contre le mauvais libstdc++, ce qui peut se produire si vous avez plusieurs versions de celui-ci installé et que vous ne passez pas -pthread (ou votre installation GCC est complètement foireuse)
Je pense que -pthread est passé à compilateur, parce que je l'ai mis dans le même endroit que j'ai mis -std=c++11, et le code ne sera pas compilé quand je n'ai pas mis -std=c++11. Plus étrange, c'est que le code fonctionne correctement lorsque je le compile en ligne de commande manuellement.
Cette erreur arrive vraiment quand -pthread n'est pas utilisé (même si vous avez seulement une libstdc++ est installé). Assurez-vous que -pthread est utilisé pour la commande du compilateur et l'éditeur de liens de commande. Sinon libpthread.ne sera donc pas lié au nombre de threads et ne peut pas être lancé au moment de l'exécution.

OriginalL'auteur melmi | 2012-05-01