【问题标题】:Unable to build GCC due to c++11 errors由于 c++11 错误,无法构建 GCC
【发布时间】:2016-12-18 01:16:39
【问题描述】:

我需要旧版本的 GCC 来安装 CUDA 工具包,因为 CUDA 工具包不支持 5.3.1 之后的 GCC,而且我尝试安装它的 Fedora 机器带有 GCC 6。我没有太多控制机器,所以我不得不自己构建 GCC。我遵循的步骤是:

$ cd gcc-5.3.0
$ contrib/download_prerequisites
$ cd ../build
$ ../gcc-5.3.0/configure --prefix=$HOME/local/gcc-5.3.0 --program-suffix=5.3 --enable-shared --enable-multiarch --enable-threads=posix --enable-languages=c,c++,fortran --enable-checking=release --with-tune=generic
$ make

这导致configure 成功,但make 失败并出现错误:

cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute

还有一大堆其他 C++11 警告。经过一些谷歌搜索,我认为这与使用 GCC 6 构建 GCC 5 或更早版本有关。我认为如果我可以强制编译器改为遵循 C++98 可能会有所帮助。所以,我尝试了:

$ export CXXFLAGS="-std=gnu++98"
$ ../gcc-5.3.0/configure ...
$ make

没用。我仍然不断收到相同的 C++11 警告,构建失败并出现完全相同的错误。然后,我尝试了:

$ ../gcc-5.3.0/configure CXXFLAGS="-std=gnu++98" ...
$ make

同样的错误。这次我偷看了 Makefile,它确实在这里和那里将 CXXFLAGS 设置为 -std=gnu++98。另外,我也尝试构建 GCC 4.9.3 以查看这是否是与特定版本相关的问题,但我再次遇到相同的错误。

我不确定如何继续。任何帮助深表感谢。谢谢。

【问题讨论】:

  • 根据文档gcc.gnu.org/onlinedocs/gcc/Inline.htmlgnu_inline 是对 pre-c99 C 代码的 gcc 扩展。由于您拥有源代码,因此您可以找到导致错误的文件并尝试将有问题的声明更改为 inline,使其遵循 C99/11 和 C++ 语法,或者更改为 __INLINE__inline__。我的猜测是,您的 C++ 代码包含一些为 C99 之前的 c 代码编写的标头。更多信息在这里:gcc.gnu.org/ml/gcc-patches/2015-08/msg00375.html
  • 有趣的建议。我尝试了引用链接中提到的更改,它比之前的错误更进一步,但最终失败并出现错误gcc-5.3.0/gcc/cp/except.c:1043: undefined reference to `libc_name_p(char const*, unsigned int)' collect2: error: ld returned 1 exit status
  • 一一尝试这些解决方案? google.com/…

标签: c++ build g++


【解决方案1】:

如果其他人遇到此问题,显然它已由 patch 修复。如果您对 GCC 源文件进行了建议的更改(此处过于冗长无法提及,但足够简单,可以手动完成),那么 configuremake 无需传递 -std 选项即可成功工作.我使用 GCC 6.2.1 成功构建了 GCC 5.3.0,并对源文件进行了这些更改。

【讨论】:

  • 出现以下错误In file included from ../.././gcc/cp/except.c:1023:0: ../.././gcc/cp/cfns.h:31:9: error: "cfns" is not a valid filename #line 3 cfns.gperf"。是否可以使用更高版本(7)构建旧的 gcc(5.3.1)
  • 我尝试将其用于 gcc-4.8.5,现在遇到此错误:./md-unwind-support.h:141:18: 错误:字段 'uc' 具有不完整的类型 struct ucontext uc ;
  • 很好奇为什么他们发布了一个不能编译的 GCC 版本?
  • 对于 ucontext 编译失败,我发现:unix.stackexchange.com/questions/566650/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 2011-11-26
  • 2014-06-25
  • 2017-01-31
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多