【问题标题】:Eclipse / g++ not recognizing "-std=c++11" flagEclipse / g++ 无法识别“-std=c++11”标志
【发布时间】:2015-08-16 17:09:11
【问题描述】:

我正在使用 Eclipse Luna 和 g++ 4.7.2(由devtoolset-2 提供)运行 CentOS 6.6 x64。我正在使用 Eclipse 内置的自动生成文件。

我已经使用 scl enable devtoolset-2 bash 启用了 g++ 4.7.2

[me@dev ~]# g++ --version g++ (GCC) 4.7.2 20121015 (红帽 4.7.2-5) 版权所有 (C) 2012 Free Software Foundation, Inc. 这是免费软件;请参阅复制条件的来源。没有 保修单;甚至不考虑适销性或特定用途的适用性。

不幸的是,在编译时,Eclipse 会抛出错误,说“-std=c++11”不是一个有效的选项。我在项目属性>> C/C++ 构建>>设置>>方言>>“其他方言标志”下设置了方言,值为“-std=c++11”。

调用:GCC C++ Compiler make: *** Waiting for unfinished jobs.... g++ -std=c++11 .... cc1plus:错误:无法识别的命令行选项 "-std=c++11"

我尝试使用带有“-std=c++0x”的“语言标准”选项,但编译时会抛出错误

map<int, MyObject*> myObjectMap; 
// assume I've added in objects before the loop
for (const auto& kv : myObjectMap) // line 249
{
    // do things
}

249: 错误:':' 标记之前的预期初始化程序

【问题讨论】:

  • 嗯,gcc 4.6 中引入了 range-for,所以这应该适用于 -std=c++0x。可以发SSCCE吗?
  • 获取更新版本的 GCC。 c++11 在 4.7.x IIRC 版本中是实验性的。 -std=c++0x 选项应该可以启用这些实验性功能。
  • GCC 4.7 应该理解命令行选项-std=c++11 和包括基于范围的for循环的代码。您是否从启用了 devtoolset 的 shell 启动了 Eclipse?
  • 你可以直接从命令行尝试构建吗?
  • @thaspius 啊。 devtoolset 安装了一个新的开发环境并行到现有的环境。默认仍然是旧的,新的只有在你改变环境时才会激活。 Eclipse 需要知道使用哪一个。顺便说一句:如果可能,请考虑使用devtoolset-2.1,因为这也是 RHEL7(和 Centos 等价物)正在使用的。

标签: c++ eclipse c++11 eclipse-cdt devtoolset


【解决方案1】:

如果您希望 Eclipse 使用已安装的 devtoolset-2,您需要从启用了 devtoolset 的环境中启动 Eclipse。最明显的是,这可以通过终端来完成

scl enable devtoolset-2 eclipse &

解释一下:devtoolset 是作为替代开发环境安装的,默认情况下处于活动状态。只有当显式激活时,您才会获得理解-std=c++11 和您正在寻找的功能的新编译器版本。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2015-10-14
    • 2018-03-08
    • 2017-02-11
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多