std :: thread在cygwin中工作但在MinGw中不起作用

时间:2016-01-18 05:26:20

标签: c++ c++11 cygwin mingw 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;
}

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

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

哪个适合你好世界。但是这一次,它给了我这个错误:

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

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

2 个答案:

答案 0 :(得分:4)

如果您想使用std::thread,则需要使用posix线程支持编译MinGW-w64(或者更确切地说是Windows上的GCC),可能是您使用本机Windows线程下载了一个版本。

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

答案 1 :(得分:2)

我在linux(交叉编译)中对此进行了测试。

编译好了,

i686-w64-mingw32-g++-posix -std=c++11 threads.cpp -lwinpthread

这不是

i686-w64-mingw32-g++-win32 -std=c++11 threads.cpp -lwinpthread

编译器之间的差异是编译器构建时使用的--enable-threads=win32--enable-threads=posix选项。 g++ -v应该显示使用的内容。