1

可能重复:
在命名空间 std 中找不到 GCC std::thread

我希望这段代码能够在 gcc 下编译,但它没有。我正在使用 mingw 4.7.0。我看到了标题,但这些类似乎不存在。我需要什么标志?我用它跑了

g++ -std=gnu++11 main.cpp

编码

#include<atomic>
#include<thread>
#include<iostream>
using namespace std;
atomic<int> a1,a2,a3;

void test(){
    cout<<"run";
}

int main(){
    thread t(test);
    t.join();
}

我得到的错误是线程不存在。在我的其他代码中,它还说 std::this_thread::yield() 不存在。MSVC11 编译得很好

4

1 回答 1

6

相对于 C++11,GCC 的 MingW 实现并不完整。您可以 1)等待,2)自己修复(开源!),或 3)使用不同的编译器。GCC 只是使用 pthreads 来实现标准库线程功能,而这些在 Windows 上不可用。

在 Linux 上,您必须进行编译g++ -std=c++11 -pthread才能使程序正常工作。


这不是 GCC 的 MingW 端口唯一缺乏的方面。另一个是std::random_device,它试图/dev/urandom在 Windows 上打开并且可以预见地失败。基本上,有人需要用适当的 Windows API 原语重写实现的核心,但我认为还没有人这样做。

于 2012-09-10T11:53:06.143 回答