由于centos7版本自带gcc是4.8.5版本。无法自动升级到高版本,所以只能手动更新。
需要下载gcc源码和对应的依赖:
gcc-5.4.0.tar.gz 安装包
http://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz
gmp-4.3.2.tar.bz2 gcc依赖包
ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2
mpfr-2.4.2.tar.bz2 gcc依赖包
http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2
mpc-0.8.1.tar.gz gcc依赖包
http://www.multiprecision.org/downloads/mpc-0.8.1.tar.gz
上面三个依赖的版本依据可以将gcc-5.4.0.tar.gz解压后在gcc-5.4.0/contrib/download_prerequisites文件里面看到如下:
# Necessary to build GCC.
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1
然后就是安装,如果不是root,安装时注意加sudo。
[root@localhost gcc-build]#tar -xjvf gmp-4.3.2.tar.bz2
[root@localhost gcc-build]#cd gmp-4.3.2
[root@localhost gcc-build]#mkdir gmp-build
[root@localhost gcc-build]#cd gmp-build
#执行配置 --prefix表示后面将要安装到的目标位置,下面一样
[root@localhost gcc-build]#../configure --prefix=/usr/local/gmp-4.3.2
[root@localhost gcc-build]#make
[root@localhost gcc-build]#make install
安装mpfr依赖于gmp,所以应先安装gmp。
[root@localhost gcc-build]#tar -xjvf mpfr-2.4.2.tar.bz2
[root@localhost gcc-build]#cd mpfr-2.4.2
[root@localhost gcc-build]#mkdir mpfr-build
[root@localhost gcc-build]#cd mpfr-build
[root@localhost gcc-build]#../configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
[root@localhost gcc-build]#make
[root@localhost gcc-build]#make install
[root@localhost gcc-build]#tar -xzvf mpc-0.8.1.tar.gz
[root@localhost gcc-build]#cd mpc-0.8.1
[root@localhost gcc-build]#mkdir mpc-build
[root@localhost gcc-build]#cd mpc-build
[root@localhost gcc-build]#../configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2
[root@localhost gcc-build]#make
[root@localhost gcc-build]#make install
添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp-4.3.2/lib:/usr/local/mpc-0.8.1/lib:/usr/local/mpfr-2.4.2/lib
[root@localhost gcc-build]#tar -xzvf gcc-5.4.0.tar.gz
[root@localhost gcc-build]#cd gcc-5.4.0
[root@localhost gcc-build]#mkdir gcc-build
[root@localhost gcc-build]#cd gcc-build
[root@localhost gcc-build]#../configure --prefix=/usr/local/gcc-5.4.0 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1
[root@localhost gcc-build]#make
[root@localhost gcc-build]#make install
重新设置gcc环境变量,更新系统gcc版本号
#备份gcc-4.4.7
mkdir /usr/gcc447backup/
mv /usr/bin/{gcc,g++} /usr/gcc447backup
ln -s /usr/local/gcc-5.4.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-5.4.0/bin/g++ /usr/bin/g++
gcc -v
验证
gcc -v
如果显示的gcc版本仍是以前的版本,可以重启系统;which gcc 查看gcc的安装位置。
这个时候如果编译程序会发现提示:version `GLIBCXX_3.4.21’ not found问题。
然后这里还有一个问题,就是使用的libstdc++等文件时,发现使用的还是gcc4.4.2,没有使用新的gcc编译出来的so,这个时候就需要我们去查询到最新的so,把so复制到/usr/lib64下面重新软链接。
使用下面语句查看最新so文件,注意没有权限要加上sudo。
find / -name "libstdc++.so*"
复制到/usr/lib64。然后将libstdc++.so.6 软链接到最新的库上面,这里是libstdc++.so.6.0.21
ln -snf /usr/local/gcc-5.4.0/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6
成功后可以使用strings查看,也可以查看其它文件,原理类似
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
libmpfr.so.1 libgmp.so.3 libmpc.so.2
如果lib64没有软链接
ln -s /usr/local/gmp-4.3.2/lib/libgmp.so.3 /usr/lib64/libgmp.so.3
ln -s /usr/local/mpc-0.8.1/lib/libmpc.so.2 /usr/lib64/libmpc.so.2
ln -s /usr/local/mpfr-2.4.2/lib/libmpfr.so.1 /usr/lib64/libmpfr.so.1
如果/usr/lib64有软链接,就重新修改链接
ln –snf /usr/local/gmp-4.3.2/lib/libgmp.so.3 /usr/lib64/libgmp.so.3
ln –snf /usr/local/mpc-0.8.1/lib/libmpc.so.2 /usr/lib64/libmpc.so.2
ln –snf /usr/local/mpfr-2.4.2/lib/libmpfr.so.1 /usr/lib64/libmpfr.so.1
注:
1.安装gcc出现错误:configure: error: error verifying int64_t uses long long
sudo yum install gcc-c++
2.解压出现错误:tar (child): bzip2:无法 exec: 没有那个文件或目录
yum -y install bzip2