【问题标题】:'-std=c++11' is valid for C++/ObjC++ but not for C'-std=c++11' 对 C++/ObjC++ 有效,但对 C 无效
【发布时间】:2015-01-07 11:05:03
【问题描述】:

我正在尝试使用以下配置构建 json-c:

./configure --target=arm-linux-androideabi --host=arm-linux-androideabi \
            --build=x86_64-unknown-linux-gnu

但我收到以下错误:

cc1: error: command line option '-std=c++11' is valid for C++/ObjC++ but not for C [-Werror]

我尝试将--disable-std-c++11--disable-std-cpp11 添加到配置中,但总是遇到同样的问题。

如何解决?

【问题讨论】:

  • 你的CFLAGS 是什么?你有预定义的CFLAGS吗?
  • 也许你有一些环境变量,例如错误包含 -std=c++11 的 CFLAGS ?
  • @iharob。我只运行./configure,然后运行make
  • @nos 如何从CFLAGS中删除-std=c++11
  • 在运行configure之前尝试CFLAGS="" ./configure --target=arm-linux-androideabi --host=arm-linux-androideabi \ --build=x86_64-unknown-linux-gnuunset CFLAGS

标签: c++ c c++11 makefile automake


【解决方案1】:

既然没人回答我,那我自己回答吧

实际上-std=c++11是由全局变量CPPFLAGS注入的。

我刚刚在./configure-std=c++11 消失之前添加了以下行

export CPPFLAGS=""

【讨论】:

  • CPPFLAGS 中的 CPP 用于 C PreProcessor,而不是 C PlusPlus。后者有一个 CXXFLAGS 环境变量。如果您的全局 CPPFLAGS 中有 -std=c++11,那么您做错了什么,您不应该更改任何脚本来解决它,您应该查看设置该环境变量的内容并在那里删除它。
  • @hvd 我什么都没做。我刚刚使用问题中指示的选项执行了./configure,然后执行了make,我遇到了这个问题
  • @hvd 在我正在编译的包之后:s3.amazonaws.com/json-c_releases/releases/json-c-0.12.tar.gz
  • @hvd 查了源码,没有c++11
  • 是您将-std=c++11 添加到您的全球 CPPFLAGS 中的人,不是吗?还有谁,特别是如果你已经发现包没有这样做?
【解决方案2】:

如果标志是使用ADD_DEFINITIONS(-std=c++0x) 设置的,则可以使用REMOVE_DEFINITIONS(-std=c++0x) 将其删除,然后仅使用SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 为c++ 设置

为什么会有人做这样的事?在大型、混合的“主要是 C++”项目中,ADD_DEFINITIONSREMOVE_DEFINITIONS 是一种基于特定 cmake 目录在std c++ 级别之间切换的快速方法,但在编译期间会产生意外的副作用——或者更糟-Werror 构建时编译失败。

【讨论】:

    【解决方案3】:

    对我来说,这意味着“编辑 setup.py 并删除添加 -std=c++11 的位置”FWIW。

    【讨论】:

    • 什么是setup.py? json-c中没有这样的文件。
    • 如果您在执行 python 风格的 C 构建时遇到此错误(setup.py 有点类似于配置 FWIW)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多