std::thread 在 cygwin 中有效,但在 MinGw 中无效

use*_*285 2 c++ cygwin mingw c++11 stdthread

所以我今天决定尝试一下c++。我下载了MinGw和它附带的g++编译器。我决定测试以下代码:

#include <iostream>
#include <thread>

int foo()
{
    std::cout << "foo" << std::endl;
}

int main()
{
    std::thread t1(foo);
    t1.join();
    std::cout << "done" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下行在命令行上编译它:

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

这适用于你好世界。然而这一次,它给了我这个错误:

error: 'thread' is not a member of 'std'

我使用 cygwin 提供的 g++ 尝试了完全相同的代码,并且它有效。那么为什么它在 MinGw 中不起作用呢?是不是已经过时了或者什么的?我想使用 c++11 和 c++14 编译东西,就像在 cygwin 终端上一样,但在 cygwin 环境之外。

use*_*267 5

如果您想使用 MinGW-w64(或者更确切地说 Windows 上的 GCC),则需要使用 posix 线程支持进行编译std::thread,大概您下载了带有本机 Windows 线程的版本。

查看针对64 位32 位的 mingw-builds 文件夹,然后选择带有 posix 线程的版本。您还需要选择异常处理方法,如果您没有理由选择其他方法,则坚持使用 GCC 默认值 seh(64 位)和 dwarf(32 位)。

  • @NathanielBrough 在 SO 答案中链接到事物的具体版本通常不是一个好主意,它可能会导致人们下载旧软件。 (2认同)