【发布时间】: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;
^
好像<mutex> 不受支持。编译器不会抱怨#include <mutex>,所以我不知道为什么会出现这个错误。
【问题讨论】:
-
我看到我在 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 线程库”,其中包含头文件和开发文件。我以为这样可以解决问题,但我仍然遇到同样的错误。