J'ai donc écrit un programme pour tester les threads sur kubuntu linux 64 bits, version 13.04. En fait, j'ai volé le code de quelqu'un d'autre qui écrivait un programme de test.
#include <cstdlib>
#include <iostream>
#include <thread>
void task1(const std::string msg)
{
std::cout << "task1 says: " << msg << std::endl;
}
int main(int argc, char **argv)
{
std::thread t1(task1, "Hello");
t1.join();
return EXIT_SUCCESS;
}
J'ai compilé en utilisant:
g++ -pthread -std=c++11 -c main.cpp
g++ main.o -o main.out
Puis couru:
./main.out
En passant, lorsque je suis "-l", main.out apparaît en texte vert comme tous les exécutables, mais comporte également un astérisque à la fin de son nom. Pourquoi est-ce?
Revenons au problème: lorsque j'ai lancé main.out, une erreur est apparue, qui disait:
terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
Aborted (core dumped)
Quelqu'un a des idées sur la façon de résoudre ce problème?
Vous ne liez pas correctement pthread, essayez la commande ci-dessous (remarque: l'ordre est important)
g++ main.cpp -o main.out -pthread -std=c++11
OR
Faites-le avec deux commandes
g++ -c main.cpp -pthread -std=c++11 // generate target object file
g++ main.o -o main.out -pthread -std=c++11 // link to target binary