【问题标题】:My MinGW-builds 32-bit installation won't recognize -std=c++11我的 MinGW-builds 32 位安装无法识别 -std=c++11
【发布时间】:2014-07-01 02:03:14
【问题描述】:

我在 64 位 Windows 7 系统上使用 Eclipse Kepler。我尝试了 MinGW-builds 32 位安装的旧版本和最新版本,但在任何方面似乎都无法正常运行,更具体地说,甚至无法识别任何 c++11 标志。我尝试了多次重新安装,但无济于事。另一方面,我可以始终如一地让 64 位安装完美运行。麻烦的是,我想使用一些 32 位库。 32 位安装是否需要一些我不知道的额外步骤?谢谢。

注意:我已经尝试了有关线程 here 的所有建议(尽管它涉及不同的发行版),但它们没有奏效。

编辑:

g++ --version 输出:

g++ (rev5, Built by MinGW-W64 project) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.

Eclipse 错误:

20:20:45 **** Rebuild of configuration Debug for project workerbees ****
Info: Internal Builder is used for build
g++ "-ID:\\blaise\\Dev\\libtcod-1.5.1\\include" -O3 -Wall -c -fmessage-length=0 -std=c++11 -o "src\\workerbees.o" "..\\src\\workerbees.cpp" 
cc1plus.exe: error: unrecognized command line option '-std=c++11'

20:20:45 Build Finished (took 143ms)

【问题讨论】:

  • 什么版本? (检查g++ -v
  • 发布错误信息。
  • 抱歉,版本和确切的错误信息已更新。
  • 您确定 Eclipse 获取的 g++ 与您执行 g++ --version 命令时使用的相同吗?也许在 Eclipse 项目设置中加入 --version-v 选项。

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


【解决方案1】:

4.8.1 版当然支持--std=c++11。通过使用 4.8.1 版本编译一个简单的程序,您将能够亲眼看到这一点。因此唯一合理的结论是无法识别--std=c++11 的编译器是旧版本。

【讨论】:

    【解决方案2】:

    由于 MinGW 不支持 POSIX API,它必须禁用 libstdc++ 中的 C++11 线程相关功能(因为不支持 POSIX 线程)。

    然而,MinGW-W64 带有针对 32 位 Windows 的工具链和更好的 POSIX 线程支持。按照以下步骤安装支持 C++11 的 MinGW-W64:

    • here 下载 MinGW-W64 并将其解压缩到 C:\MinGW64 等方便的位置:

    确保下载适当的包,如 针对 Win32 / Personal Builds / XXX / threads-posix / sjlj / 的文件/工具链 /

    • here下载MinGW-W64的MSYS二进制文件,解压到C:\MinGW64\msys\下

    • 通过运行 c:\MinGW64\msys\1.0\msys.bat 并输入以下命令,将 MSYS 配置为使用 MinGW:

          sh /postinstall/pi.sh
      

      指定 MinGW 的安装位置(如步骤 1 所示),您就可以开始了。

    【讨论】:

    • 具有 gcc 4.8.1 的 MinGW 版本是否会因为 <thread> 库支持问题而完全禁用 c++11 支持?
    • 不,c++11 支持并未完全禁用。只有线程相关的功能被禁用。
    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 2016-02-28
    • 2015-08-16
    • 1970-01-01
    • 2014-07-06
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多