添加对c ++ 2011的编译器支持

时间:2017-12-12 12:08:08

标签: c++ makefile compiler-errors

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

  

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

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

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

编译器是用于Ubuntu的g ++ 5.4.0

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 \

1 个答案:

答案 0 :(得分:2)

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

如果没有这样的安装说明(你仔细检查了吗?),那么你应该回到软件分发点并在那里寻求帮助(你可以提示在你的问题中责备你的问题 - 所有人,甚至分发预测试软件,应该告诉用户如何构建东西。)

但是,如果你已经处于高度干燥状态,那么以下内容应该广泛地指出下一步要看的地方:

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

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

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

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

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

玩得开心。