【问题标题】:Getting error: 'mutex' in namespace 'std' does not name a type in MinGW mysys prompt出现错误:命名空间“std”中的“mutex”没有在 MinGW mysys 提示符中命名类型
【发布时间】:2015-03-12 10:15:12
【问题描述】:

我已经从官网下载了MinGW,并安装在我的Windows 8.1机器上。

运行 g++ --version 给我 g++.exe (GCC) 4.8.1。

我正在尝试在 MinGW 编译器中编译现有代码库,但失败并出现以下错误:

error: 'mutex' in namespace 'std' does not
name a type
     private: std::mutex m_Mutex;
              ^
error: 'condition_variable' in namespace 's

还有更多与锁定和线程相关的错误。!

我能够在 Cygwin-64 中编译相同的代码库而没有任何问题。 我需要在 MinGW 中成功构建和编译,以便创建一些在 MSVS 上兼容的 .dll 文件。!

我已经参考了以下链接,但我无法通过解决方案。

Getting std::thread/mutex to work under Win7 with mingw and g++ 4.7.2
MinGW 4.8.1 C++11 thread support

您的帮助将不胜感激。谢谢。

【问题讨论】:

  • 你启用-std=c++11了吗?
  • 你是用-std=c++11求C++11语言版本吗?所有这些花哨的线程类都是该版本的新内容。
  • 我在编译时使用-std=c++11!
  • libstdc++ 不支持大部分线程库,如果你的编译器配置了 win32 线程模型,你需要一个带有 posix 线程的 gcc 版本。 This 应该是你需要的。

标签: c++ multithreading c++11 compiler-errors mingw


【解决方案1】:

mingw.org 的旧版 MinGW 不支持 C++11 线程工具。

直接的替代方法是使用 MSYS2 并从那里安装 MinGW-w64 编译器,它们确实支持所需的功能。按照该文档中的步骤操作,然后执行:

pacman -Sy mingw-w64-i686-gcc

这将为您提供 32 位 MinGW-w64 GCC。你可以从“MinGW-w64 32-bit Shell”中调用它,或者在PATH中添加<MSYS2>\mingw32\bin

【讨论】:

  • 我在 Msys 提示符下编译代码库。由于代码库具有 openSSL 库和 netinet/in.h 类似文件,因此我在编译时也添加了这些路径。
  • 这是我用来编译现有代码的命令格式..:g++ -std=c++11 -I /c/openssl-1.0.1i/openssl-1.0.1i/include/ -Iinclude -I /c/cygwin64/usr/i686-pc-cygwin/sys-root/usr/include -I /c/MinGW/mingw32/lib/gcc/min gw32/4.8.1/include -pthread source/main .cpp source/*/*cpp -lpthread -lssl -lcrypto
  • 您也可以从 MSYS2 安装 openssl:pacman -Sy mingw-w64-i686-opensll,并且在使用其编译器进行编译时无需添加任何其他路径。另外:Cygwin 目录永远没有位置。
  • 您是从 MSYS2 shell 调用新编译器吗?它不会神奇地替换您的旧 MinGW 安装。
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 2015-05-08
  • 2014-12-21
  • 1970-01-01
  • 2017-12-08
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多