Gcc mingw4.8.1c++11线程支持

Gcc mingw4.8.1c++11线程支持,gcc,c++11,g++,mingw,Gcc,C++11,G++,Mingw,我从官方网站下载了MinGW的版本,并将其安装在我的Windows7机器上 运行g++-version为我提供了g++.exe GCC4.8.1,我相信GCC4.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; } 给出错误: mai

我从官方网站下载了MinGW的版本,并将其安装在我的Windows7机器上

运行g++-version为我提供了g++.exe GCC4.8.1,我相信GCC4.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;
}
给出错误:

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;
                ^

似乎不受支持。编译器没有抱怨include,所以我不知道为什么会出现此错误。

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


以下是。

已经有std::thread和sync原语的本机win32实现:
它是一个只包含标题的库,应该可以与任何兼容C++11的MinGW版本一起使用。

我发现我在cygwin gcc 4.8.3上没有这个问题。也许你可以看看你的互斥报头——也许你可以在里面发现一些奇怪的东西。除非安装在其他地方,它的位置应该是这样的/lib/gcc/i686 pc cygwin/4.8.1/include/c++/mutex。我使用的是MinGW而不是cygwinOk。我的错。。。不过,查看该标题可能会很有用。毕竟,编译器似乎在std名称空间中找不到互斥体。您确切使用哪个MinGW版本?特别是,您的版本支持哪种线程模型:win32或posix?My MinGW有一个名为mingw32 libpthreadgc或posix threading library for win32的.dll包。但这只是运行库,所以我刚刚安装了一个名为mingw32-pthreads-w32的包,这是一个针对Win32的POSIX线程库,其中包含头文件和开发文件。我原以为这会解决问题,但我还是遇到了同样的错误;使用win32线程构建,您需要使用Alexander Vassilev的答案中描述的meganz插件。
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;
                ^