web-dev-qa-db-ja.com

C ++スレッド、std :: system_error-操作は許可されていませんか?

そこで、64ビットkubuntu linuxバージョン13.04でスレッドをテストするプログラムを作成しました。実際、テストプログラムを書いている他の誰かからコードを盗みました。

#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;
}

私は次を使用してコンパイルしました:

g++ -pthread -std=c++11 -c main.cpp
g++ main.o -o main.out

その後、実行しました:

./main.out

余談ですが、「ls -l」と入力すると、main.outはすべての実行可能ファイルと同様に緑色のテキストで表示されますが、名前の最後にアスタリスクが付いています。どうしてこれなの?

手元の問題に戻る:main.outを実行すると、次のようなエラーが表示されました。

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

これを修正する方法についてのアイデアはありますか?

55
user3728501

Pthreadを適切にリンクしていません。以下のコマンドを試してください(注:順序が重要です)

g++  main.cpp -o main.out -pthread -std=c++11

OR

2つのコマンドで実行する

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