【问题标题】:MinGW 4.8.1 C++11 thread supportMinGW 4.8.1 C++11 线程支持
【发布时间】:2014-07-23 11:21:35
【问题描述】:

我从官网下载了MinGW版本:http://sourceforge.net/projects/mingw/files/并安装在我的Windows 7机器上。

运行 g++ --version 给了我g++.exe (GCC) 4.8.1,我相信 GCC 4.8.1 支持 C++11 功能,包括线程。

运行g++ -std=c++11 main.cpp成功编译以下程序。

//main.cpp
#include <memory>

int main() {
    std::unique_ptr<int> a(new int);
    return 0;
}

但在以下程序上运行g++ -std=c++11 main.cpp

//main.cpp
#include <mutex>

int main() {
    std::mutex myMutex;
    return 0;
}

给出错误:

main.cpp: In function `int main()`:
main.cpp:5:5: error: 'mutex' is not a member of 'std'
    std::mutex myMutex;
    ^
main.cpp:5:16: error: expected ';' before 'myMutex'
    std::mutex myMutex;
                ^

好像&lt;mutex&gt; 不受支持。编译器不会抱怨#include &lt;mutex&gt;,所以我不知道为什么会出现这个错误。

【问题讨论】:

  • 我看到我在 cygwin gcc 4.8.3 上没有这个问题。也许你可以看看你的互斥头 - 也许你可以在那里发现一些奇怪的东西。除非安装在其他地方,否则它的位置应该是这样的 /lib/gcc/i686-pc-cygwin/4.8.1/include/c++/mutex。
  • 我使用的是 MinGW 而不是 cygwin
  • 好的。我的错...但是查看该标题可能很有用。毕竟编译器似乎在 std 命名空间内找不到互斥锁。
  • 您具体使用哪个 MinGW 版本?具体来说,您的版本支持哪种线程模型:win32 还是 posix?
  • 我的 MinGW 有一个名为“mingw32-libpthreadgc”或“用于 Win32 的 POSIX 线程库”的 .dll 包。但这只是运行时库,所以我只是安装了一个名为 mingw32-pthreads-w32 的包,这是一个“用于 Win32 的 POSIX 线程库”,其中包含头文件和开发文件。我以为这样可以解决问题,但我仍然遇到同样的错误。

标签: gcc c++11 g++ mingw


【解决方案1】:

如果我理解得很好,mingw 仍然不支持 std 线程,但一些 mingw-w64 构建支持它。幸运的是,您仍然可以使用此版本的 mingw 构建 32 位应用程序。

这里是link for the builds

【讨论】:

  • 澄清一下:使用 pthread 构建(预编译,或者如果您从 mingw-w64 安装程序中选择 pthread)可以开箱即用;使用 win32 线程构建,您需要使用 Alexander Vassilev 的回答中描述的 meganz 插件。
【解决方案2】:

已经有 std::thread 和同步原语的本机 win32 实现: https://github.com/meganz/mingw-std-threads 它是一个只有头文件的库,应该适用于任何符合 C++11 的 MinGW 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2015-12-24
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多