【问题标题】:-std=c++11 flag unrecognized in gcc/g++ 4.4.6-std=c++11 标志在 gcc/g++ 4.4.6 中无法识别
【发布时间】:2023-03-17 12:45:01
【问题描述】:

我有一些使用 C++11 标准编写的代码,我们的 g++ 版本是 4.4.6,据我所知,应该支持 C++11(从 4.3 开始)。

但是,在尝试使用标志 -std=c++11 -std=gnu++11 进行编译时,我得到了重复的错误

cc1plus: error: unrecognized command line option `-std=c++11`
cc1plus: error: unrecognized command line option `-std=gnu++11`

-std=c++0x编译会产生诸如

之类的错误
DeviceInfo.cpp:22: error: expected initializer before ‘:’ token

对应这行代码:

for (cl::Platform& plat : platforms)

这是 C++11 特定的语法位吗? (在我看来它不像,但所有这些代码都是作为示例给出的,所以应该按照编译器提供的那样工作。)

有什么帮助吗?

【问题讨论】:

  • 您需要 GCC >= 4.7 才能获得 c++11 标志。 4.4 太旧了,即使使用-std=c++0x,您也不会获得基于范围的 AFAIK。请至少阅读编译器的手册页,其中列出了它支持的选项。

标签: c++ gcc compiler-construction c++11 g++


【解决方案1】:

-std=c++11 设置被许多更高版本的 GCC 支持。 -std=c++0x 设置启用了对新生 C++11 的初始支持。这可能是您应该尝试的。

是的,您尝试使用的 for 语法主要是 C++11 语法。

【讨论】:

  • 为快速帮助干杯:)
  • 如果源链接也被共享,我将不胜感激。
【解决方案2】:
for (cl::Platform& plat : platforms)

是的,它是 C++11 的特定用法。 GCC 4.7 或更高版本同时支持带有-std=c++11 选项的C++11。

【讨论】:

    【解决方案3】:

    4.6 及更高版本似乎支持基于范围的 for 循环。

    This page 显示 GCC 对 C++11 功能的支持。

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 1970-01-01
      • 2016-07-08
      • 2014-10-26
      • 1970-01-01
      • 2018-03-08
      • 2022-09-28
      • 2015-10-14
      • 1970-01-01
      相关资源
      最近更新 更多