web-dev-qa-db-fra.com

C ++ Threads, std :: system_error - Opération non autorisée?

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?

55
user3728501

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
103
billz