我安装了mingw32-pthreads-w32,但我还是无法编译std :: mutex

时间:2017-04-27 12:57:49

标签: c++ g++ mingw

根据堆栈溢出的建议,我安装了mingw32 pthread包:

image description

但我仍然无法使用C ++ 11多线程编译代码:

 error: 'mutex' in namespace 'std' does not name a type

我使用makefile,我使用mingw32-make执行,并使用位于g++的{​​{1}}。

G ++版本:C:\MinGW\bin\g++.exe Mingw32制作版本:g++.exe (GCC) 5.3.0GNU Make 3.82.90

我使用Built for i686-pc-mingw32选项生成已使用标题的列表,这就是我所拥有的:

-M

我甚至不确定这些是否是正确的标题。

可能有什么不对?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

GCC for Windows附带两个线程模型:win32和posix。只有posix线程模型支持标准的多线程库。

要检查,请尝试运行g++ -v。如果您没有看到--enable-thread=posix,则表示您的编译器套件不支持标准多线程库。

您可以从https://sourceforge.net/projects/mingw-w64/下载Mingw64 GCC,它们是使用--enable-thread=posix构建的。

请注意,即使--enable-thread=posix表示您可以使用标准多线程库,但实现要比直接使用Win32 API(如CreateThread)慢得多。这是因为对于GCC,std::thread等在gthread之上实现,gthread基于pthread实现。由于Windows不支持pthread,因此Mingw64团队使用Win32 API实现pthread。你可以看到你需要付出相当多的抽象债务。

如果性能对您很重要,您可能不想使用它。您还需要将winpthread.dll分发给最终用户,因为静态链接无法正常工作。

如果您希望您的代码在所有平台上运行,可以使用它。