11

所以我一直在尝试使用 MinGW 编译器让以下代码在 Windows 上编译和运行。

#include <iostream>
#include <thread>

void test()
{
    std::cout << "test" << std::endl;
}

int main()
{
    std::thread t(test);
}

我正在使用以下命令进行编译:

g++ -std=c++11 test.cpp -o test.exe

现在的问题是应该使用的 MinGW 版本,我已经尝试了所有我知道的版本。

  1. MinGW 构建:thread-win32
  2. MinGW 构建:thread-posix
  3. MinGW-w64:stdthread 实验性 rubenvb
  4. MinGW-w64:标准线程实验 rubenvb 4.7

数字 1 不起作用,因为 GCC显然只在内部支持 pthread 的东西。

编号 2 确实编译并且它基本上甚至输出test(参见输出的最后一行),但它也因错误而崩溃:

terminate called without an active exception

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
test

3 号和 4 号再次编译,但它们不输出test,而是立即崩溃,但输出更具描述性:

terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

谷歌当然把我带到了GCC bug tracker和其他一些建议使用的帖子,-pthread这根本没有帮助。

我也尝试过手动链接winpthreadand pthread,但这也无济于事。

-std=c++11和之间也没有区别-std=gnu++11...

我现在真的很迷茫,不知道是否有可能获得支持 的 MinGW 版本,std::thread但也许我只是忽略了一些编译器标志。我希望有人可以帮助我!

4

2 回答 2

10

你忘了加入你的线程:

t.join();
于 2013-03-30T13:23:20.213 回答
4

FYI, there is already a native win32 implementation of std::thread and sync primitives. It is a header-only library and works on any C++11 compliant version of MinGW. https://github.com/meganz/mingw-std-threads

于 2014-12-11T11:34:47.570 回答