【问题标题】:Getting std::thread/mutex to work under Win7 with mingw and g++ 4.7.2使用 mingw 和 g++ 4.7.2 让 std::thread/mutex 在 Win7 下工作
【发布时间】:2013-07-07 06:23:10
【问题描述】:


您好,

我最近搬出我的 unix 避难所来测试一个所谓的跨平台网络库,结果发现 mingw 不喜欢吃 c++11 的东西。

我认为我缺少所需的标头,因为 Win7 不包含 c++11 支持。

用 VS2012 编译就好了
但 g++ 拒绝。

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

问题是:

如何在不使用 VS2012 安装提供的情况下获取 c++11 头文件/库的副本,即

附: #1 我试过 mingw-get update 但还是找不到
附言#2 我也在使用 -std=c++11


真诚的,
克里斯。

【问题讨论】:

  • 尝试谷歌搜索“rubenvb mingw threads gcc”之类的内容并下载其中一个发行版。遇到他时别忘了感谢rubenvb
  • builds here 也支持线程。对于 rubenvb 构建,请使用 experimental-stdthread
  • 您可能还想尝试 VC++。它 Windows 的标准编译器,虽然它有默认设置,但只要您避免使用它的 GUI,它的工作效果就可以接受。
  • @James Kanze 这太重了,太混乱了,我习惯于编写 makefile 和使用 gdb 进行调试。无论如何,谢谢你的提示:)。
  • @TheOtherGuy 当然不是。但是,您已经必须为不同的构建类型管理多组标志。这可以通过 makefile 中的 if 或包含使用 $(arch)$(shell uname -s) 构建的路径轻松处理(如果您已安装 CygWin 并在路径中)。

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


【解决方案1】:

这些 MinGW-w64 构建支持 C++11 线程、原子操作等。

  1. MinGW-builds are now integrated into the MinGW-w64 project
  2. MinGW-builds (project is old and will not be updated, see point above)
  3. MinGW-w64 rubenvb 64-bit32-bit 构建

请注意,MinGW-w64 不仅仅是 64 位,而是支持它,不像旧的 MinGW(.org),它缺少很多新的 Vista+ API,当然还有 64 位支持。

【讨论】:

  • rubenvb 的构建适用于 x86_64,但它无法链接 32 位目标文件,因为它缺少 32 位库,遗憾的是没有 i686 构建。
  • @Thomas i686 有一个单独的部分... google rubenvb i686
【解决方案2】:

请看这里: https://github.com/meganz/mingw-std-threads 这是 std::thread 和其他的更轻量级的原生实现,不使用 pthread 的 win32 端口。

【讨论】:

    【解决方案3】:
    1. 转到: https://sourceforge.net/projects/mingw-w64/files/?source=navbar.

    2. 查找和下载。

    MinGW-W64 GCC-8.1.0:

    x86_64-posix-seh

    1. 解压缩并移至 MinGW 文件夹。

      如果您使用 g++ 进行编译:

    2. 为新的 g++ bin 路径创建 bash 别名 ('/mingw/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/g++')

    3. 使用新的 g++ bin 编译。

      如果您使用的是 Cmake:

    4. 创建 CmakeLists.txt 并添加: 设置(CMAKE_CXX_COMPILER /mingw/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/g++)

    5. 使用 Cmake/make 编译

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2013-01-22
      相关资源
      最近更新 更多