【问题标题】:Add compiler support for c++ 2011添加对 c++ 2011 的编译器支持
【发布时间】:2017-12-12 12:08:07
【问题描述】:

我尝试使用 opendavinci 为 torcs 编译一个机器人。问题是每次我尝试编译它时

#error This file requires compiler and library support for the ISO C++ 2011 standard

出现。显而易见的解决方案是添加支持,但我有一个来自 torcs 的复杂 makefile,所以我不知道如何解决这个问题。

有什么方法可以在不更改 makefile 的情况下添加支持?我读过 CXXFLAGS 可以帮助我,但我不明白它是如何工作的。

编译器是g++ 5.4.0 for Ubuntu

felix@ubuntufelix:/usr/src/torcs/torcs-1.3.7/src/drivers/bt$ make
g++ -I/usr/src/torcs/torcs-1.3.7/export/include -I/usr/src/torcs/torcs-1.3.7 -g -O2 -Wall -fPIC -fno-strict-aliasing -O2 -DUSE_RANDR_EXT -DGL_GLEXT_PROTOTYPES -Wall -fPIC -fno-strict-aliasing -O2 -DUSE_RANDR_EXT -DGL_GLEXT_PROTOTYPES  -D_SVID_SOURCE -D_BSD_SOURCE -DSHM -DHAVE_CONFIG_H  -c driver.cpp
In file included from /usr/include/c++/5/array:35:0,
                 from driver.h:15,
                 from driver.cpp:1:
/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support \

【问题讨论】:

  • 什么编译器??
  • 进行了编辑,它是 g++ 5.4.0
  • “有没有什么方法可以在不改变 makefile 的情况下添加支持?” 那么,构建系统的其余部分是什么?如果它使用 Autoconf 或 Meson 之类的东西,那么您可以传递自定义编译器/预处理器/等。通过那个争论。您仍然需要添加更多信息。
  • 你可以试试CXXFLAGS="-std=c++11" make
  • 这是一个构建问题。向我们展示您如何构建二进制文件,我们可能会告诉您如何正确完成。

标签: c++ makefile compiler-errors


【解决方案1】:

没有完全标准的方式来构建分布式软件,但应该在发行版中有一个READMEINSTALL 文件,它提供了或多或少精确的说明。理想情况下,发行版带有配置脚本,安装过程由./configure; make; make install 组成,可能还有一些针对./configure 的发行版特殊选项。这里的基本过程是./configure脚本将合适的值编辑到Makefile.in中生成Makefile,但是这样的脚本可以任意复杂。当然,事情很少那么简单,从源代码构建复杂的软件可能是一个相当大的技术挑战(这就是为什么包管理器是一件好事)。

如果没有这样的安装说明(你仔细检查了吗?),那么你应该回到软件分发点那里寻求帮助(你可以有提示在您这样做时,您的问题中受到了责备 - 每个人,即使是发布测试版之前的软件,也应该告诉用户如何构建东西)。

但是,如果您一直处于高位和干燥状态,那么以下内容应该大致表明下一步该往哪里看:


您需要在编译器的调用中添加一个选项,告诉它支持 C++ 2011 功能(我很确定 g++ 5.4 具有这些功能,但默认情况下不启用)。

您可以通过将-std=c++11 选项添加到编译器标志来做到这一点,而您这样做的方式是使用您测量的CXXFLAGS makefile 变量(注意:CXXFLAGS 是此变量的可能/常规名称,但它不是不可侵犯的规则)。

根据 Makefile 的结构,您可以通过多种方式添加或调整该变量。

  • 编辑 Makefile - 在 Makefile 中搜索 CXXFLAGS 并将 -std 选项添加到该定义中。
  • 您将能够在 make 命令行上重新定义变量:make CXXFLAGS=-std=c++11,但这会影响 Makefile 中的任何定义,这可能很重要。
  • Makefile 的结构可以使定义包含CXXFLAGS=-foo -bar $(EXTRA_CXXFLAGS),而这正是您可以使用make EXTRA_CXXFLAGS=-std=c++11 调用make 的原因。
  • 如果有一个./configure 步骤来构建此软件,那么在执行该步骤时可能有一个可供./configure 使用的选项(这听起来不像这里的情况)。

但无论如何,您的目标是让 -std=c++11 出现在 Makefile 生成的编译器调用中。请注意,如果您将-n 选项赋予make,那么它将向您显示它将产生哪些命令,而无需实际执行任何操作。

玩得开心。

【讨论】:

  • 我会尝试你的答案,也许它可以工作,但我在 makefile 中搜索了 cxxflags,它只是有时使用但从未定义过有没有办法为 makefile 制作头文件或其他东西?并且 ./configure 存在,我也在寻找它。谢谢!
  • 一个不好的问题的好答案。 ./configure 如果由 autoconf 构建有帮助选项:./configure --help 可能会帮助 OP。
  • 感谢您的回答。/configure 用 CXXFLAGS=-stdc++11 为我做了!这个问题很糟糕,但你的回答对我帮助很大:)!
猜你喜欢
  • 2013-08-13
  • 2010-10-14
  • 2014-11-05
  • 1970-01-01
  • 2010-11-02
  • 2022-06-27
  • 1970-01-01
相关资源
最近更新 更多