7

我的程序如下所示

#include <iostream>
#include <thread>
#include <exception>

void hello()
{
    std::cout << "Hello world!!!!" << std::endl;
}

int main()
{
    std::cout << "In Main\n";
    std::thread t(hello);
    t.join();
    return 0;
}

当我使用以下命令编译它时,我没有收到任何错误

g++-4.7 -std=c++11 main.cpp

但是当我运行它时,我收到以下错误

在主要
在抛出 'std::system_error' 的实例后调用终止
what():不允许操作
中止(核心转储)

有人可以帮我解决我哪里出错了吗?

4

5 回答 5

10

当我在 GCC 中使用 C++11 线程时,我使用:

g++ -std=c++0x -pthread -g main.cpp

这对我行得通。

于 2012-11-05T07:14:28.877 回答
6

使用 编译代码时g++,请使用该-pthread选项。

以下是我从 stackoverflow 中找到的答案: In g++ is C++ 11 thread model using pthreads in the background?

于 2012-11-05T07:14:13.573 回答
3

每个人都已经回答说您需要将 -pthread 参数传递给编译器。几乎可以肯定它在 4.8 中不会改变,但根据http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52681,异常至少会有一个很好的消息说明出了什么问题。

于 2012-11-06T23:53:42.683 回答
0

您可能需要链接到 pthread 库

于 2012-11-05T07:10:25.560 回答
0

你可以试试,

g++ --std=c++11 -lpthread main.cpp
于 2015-06-02T13:21:57.923 回答