C++ Threads,std :: system_error - 不允许操作?

use*_*501 56 c++ multithreading c++11 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;
}
Run Code Online (Sandbox Code Playgroud)

我编译使用:

g++ -pthread -std=c++11 -c main.cpp
g++ main.o -o main.out
Run Code Online (Sandbox Code Playgroud)

然后跑了:

./main.out
Run Code Online (Sandbox Code Playgroud)

顺便说一下,当我使用-l'时,main.out会像所有可执行文件一样以绿色文本显示,但在其名称的末尾也有一个星号.为什么是这样?

回到手头的问题:当我运行main.out时,出现了一个错误,其中说:

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

任何有关如何解决此问题的想法?

bil*_*llz 104

您没有正确链接pthread,请尝试以下命令(注意:订单事项)

g++  main.cpp -o main.out -pthread -std=c++11
Run Code Online (Sandbox Code Playgroud)

要么

用两个命令做

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
Run Code Online (Sandbox Code Playgroud)

  • 你可以用两个命令来完成它.但是在编译和链接时必须指定`-pthread`. (11认同)
  • @billz你介意详细解释为什么-pthread的顺序很重要吗? (5认同)
  • `-pthread`的GCC手册条目具体说明"此选项为预处理器和链接器设置标志." 你应该在编译和链接时使用它. (2认同)