一:下载源代码
gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
升级到7.4.0,(gcc4.*版本不支持很多clang的高级用法)
下载安装包
wget http://ftp.gnu.org/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz
tar -vxf gcc-7.4.0.tar.gz
查看依赖文件gcc-7.4.0/contrib/download_prerequisites
cat gcc-7.4.0/contrib/download_prerequisites
program='download_prerequisites'
version='(unversioned)'
# MAINTAINERS: If you update the package versions below, please
# remember to also update the files `contrib/prerequisites.sha512` and
# `contrib/prerequisites.md5` with the new checksums.
gmp='gmp-6.1.0.tar.bz2'
mpfr='mpfr-3.1.4.tar.bz2'
mpc='mpc-1.0.3.tar.gz'
isl='isl-0.16.1.tar.bz2'
二:下载依赖文件
./contrib/download_prerequisites ##过程有点久
有一个WARNING:无法验证可能损坏的文件gmp-6.1.0.tar.bz2的完整性
gmp-6.1.0.tar.bz2: FAILED
sha512sum: WARNING: 1 computed checksum did NOT match
error: Cannot verify integrity of possibly corrupted file gmp-6.1.0.tar.bz2
查看这4个包都下载了,如果不行的话只能手动下载报错的包解压到该目录下
删了重新下载依赖:无法从gmp-6.1.0.tar.bz2中提取软件包
[root@nc-01 gcc-7.4.0]# ./contrib/download_prerequisites
2019-10-18 08:11:06 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2019-10-18 08:13:07 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2019-10-18 08:14:17 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2019-10-18 08:17:01 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 [1626446] -> "./isl-0.16.1.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.16.1.tar.bz2: OK
tar (child): lbzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
error: Cannot extract package from gmp-6.1.0.tar.bz2
这个问题其实就是因为tar解包的时候没有解成功。这是因为机器上没有安装bzip2,使用如下命令安装bzip2:
yum -y install bzip2
依赖的安装包都下好了,重新运行下解压久ok了
[root@nc-01 gcc-7.4.0]# ./contrib/download_prerequisites
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.16.1.tar.bz2: OK
All prerequisites downloaded successfully.
三:配置
创建预编译目录
mkdir build && cd build
编译
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
编译完成后
[root@nc-01 build]# ls
config.log config.status Makefile serdep.tmp
四:安装
[root@nc-01 build]# make (多任务有可能会编译报错,老老实实的make 吧)
configure: error: in `/root/GCC7.4.0_install/gcc-7.4.0/build/gcc':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.
make[2]: *** [configure-stage1-gcc] Error 1
make[2]: Leaving directory `/root/GCC7.4.0_install/gcc-7.4.0/build'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/root/GCC7.4.0_install/gcc-7.4.0/build'
make: *** [all] Error 2
configure: error: in `/root/GCC7.4.0_install/gcc-7.4.0/build/gcc’:
configure: error: C++ preprocessor “/lib/cpp” fails sanity check
[root@nc-01 build]# yum install gcc-c++
然后重新make下就ok了(过程比较久) && make install
[root@nc-01 ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/7.4.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/usr --enable-multilib --enable-languages=c,c++ -disable-multilib
Thread model: posix
gcc version 7.4.0 (GCC)