由于c ++ 11错误导致无法构建GCC

时间:2016-12-18 01:16:40

标签: c++ build g++

我需要一个旧版本的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以查看这是否是与特定版本相关的问题,但我又遇到了同样的错误。

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

1 个答案:

答案 0 :(得分:14)

如果其他人遇到此问题,显然已由此patch修复。如果您对GCC源文件进行了建议的更改(这里过于冗长,但很容易手动完成),那么configuremake无需通过即可成功运行-std个选项。我使用GCC 6.2.1成功构建了GCC 5.3.0,并对源文件进行了这些更改。