添加对C 2011的编译器支持

Add compiler support for c++ 2011

本文关键字:编译器 支持 2011 添加      更新时间:2023-10-16

我尝试使用Opendavinci的使用来编译用于TORC的机器人。问题是每次我尝试编译它

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

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

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

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 

没有完全标准的构建分布式软件的方法,但是应该在发行版中READMEINSTALL文件,这给出了更多或无用的精确指令。理想情况下,发行版带有配置脚本,安装过程由./configure; make; make install组成,可能具有对./configure给出的每分配特殊选项。这里的基本过程是./configure脚本将合适的值编辑到Makefile.in中以生成Makefile,但是此类脚本可以任意复杂。当然,事情很少如此简单,并且从源头构建复杂的软件可能是一个技术挑战(这就是为什么包装管理人员是一件好事的原因)。

如果没有这样的安装说明(您是否仔细检查了?),那么您应该回到软件分发点并在此寻求帮助(您可以有一个提示当您这样做时,您的问题的责备 - 每个人,即使是beta pre-beta软件,都应告诉用户如何构建事物)。

但是,如果您被高高干燥,那么以下内容应大致指示下一步的位置:


您需要在编译器的调用中添加一个选项,以告诉它以支持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(在此听起来不像情况)。

但一种或另一种方式,您的目标是在Makefile生成的编译器调用中出现-std=c++11。请注意,如果将-n选项提供给make,则它将向您展示它会产生的命令,而无需实际做任何事情。

玩得开心。