【问题标题】:nullptr unrecognized with gcc 4.8gcc 4.8 无法识别 nullptr
【发布时间】:2015-08-26 15:19:57
【问题描述】:

在 Red Hat Linux 站上,我使用 devtoolset2 给出以下命令:

scl enable devtoolset-2 bash

然后,当我调用 gcc --version 时,我得到:

gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15) Copyright (C) 2013 Free Software Foundation, Inc.

但是如果我编译我的程序(使用 cmake 生成的 malkefile,添加以下行:

if(UNIX)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11")
endif()

我有以下错误信息:

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

如果我编译用 -std=c++0x 替换 -std=c++11 然后,我得到这些消息:

nullptr wasnt declared in this scope.

考虑到它是关键字,如何无法识别 nullptr?

我不明白,如果你有任何想法......

【问题讨论】:

  • 根据this nullptr 从4.6版开始支持
  • cc1plus: error: unrecognized command line option "-std=c++11"
  • 你确定 cmake 使用的是正确的 gcc 版本吗?
  • @C0deH4cker cc1plus 是 g++ 的编译器部分。
  • @C0deH4cker 这不是我的经验:$ g++ q.cpp -std=asdf 结果:cc1plus: error: unrecognized command line option "-std=asdf"

标签: c++ c++11 gcc


【解决方案1】:

您没有调用 GCC 4.8.2。

您的 CMake 配置有问题,或者您的 SCL 调用有问题,或者gcc -vg++ -v 给出了不同的答案(在这种情况下,请检查您的工具集的内容)。

nullptr 不可用,-std=c++0x 被接受但-std=c++11 不被接受,都建议使用 GCC 4.3、4.4 或 4.5。

您可以尝试的一件事是从构建根目录中删除文件 CMakeCache.txt,该文件可能包含您之前环境的缓存属性。

如果做不到这一点,请打开详细输出,以便您真正了解发生了什么、正在调用哪些二进制文件以及如何调用。

【讨论】:

  • 非常感谢您的回答。删除 cmake 缓存不会改变任何东西。我尝试将 CMAKE_COMPILER_IS_GNUCXX 设置为 true 以使 g++ 运行但未成功。
  • 我尝试运行详细,将 CMAKE_VERBOSE_MAKEFILE 设置为 ON,但它似乎不起作用。你知道我们是怎么做到的吗?谢谢
  • 我还需要在生成的 Makefile 中添加它,它写为 VERBOSE = 1,但在 CMakeCache.txt 我有:CMAKE_VERBOSE_MAKEFILE:BOOL=OFF 并且没有关于编译器或 smtg 相关的更多信息。 ..
猜你喜欢
  • 2014-10-26
  • 2015-08-24
  • 2023-03-28
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多