1、环境:arm架构的centos7.4系统服务器
2、查看当前的gcc版本:gcc -v
[root@aarch64vm-centos74-011 ~]# gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
3、下载gcc 7.3.0的源码:https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
4、将源码上传至服务器然后解压
[root@aarch64vm-centos74-010 ~]# mkdir -p /usr/local/gcc
[root@aarch64vm-centos74-010 ~]# tar -xvf gcc-7.3.0.tar.gz -C /usr/local/gcc/
5、解压完成后,编译安装gcc源码
(1)进入gcc 7.3.0目录,运行 download_prerequisites 脚本 。
[root@aarch64vm-centos74-010 gcc]# cd gcc-7.3.0/
[root@aarch64vm-centos74-010 gcc-7.3.0]# ./contrib/download_prerequisites
2018-07-18 16:06:03 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2018-07-18 16:08:29 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2018-07-18 16:09:25 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2018-07-18 16:12:42 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
All prerequisites downloaded successfully.
[root@aarch64vm-centos74-010 gcc-7.3.0]#
(2)建立编译输出目录,将所有的中间文件都放到该目录中。
[root@aarch64vm-centos74-010 gcc-7.3.0]# mkdir gcc-build-7.3.0
[root@aarch64vm-centos74-010 gcc-7.3.0]# cd gcc-build-7.3.0/
[root@aarch64vm-centos74-010 gcc-build-7.3.0]# cp ../gmp-6.1.0.tar.bz2 ./
[root@aarch64vm-centos74-010 gcc-build-7.3.0]# cp ../mpfr-3.1.4.tar.bz2 ./
[root@aarch64vm-centos74-010 gcc-build-7.3.0]# cp ../mpc-1.0.3.tar.gz ./
[root@aarch64vm-centos74-010 gcc-build-7.3.0]# cp ../isl-0.16.1.tar.bz2 ./
[root@aarch64vm-centos74-010 gcc-build-7.3.0]# ls
gmp-6.1.0.tar.bz2 isl-0.16.1.tar.bz2 mpc-1.0.3.tar.gz mpfr-3.1.4.tar.bz2
[root@aarch64vm-centos74-010 gcc-build-7.3.0]#
若不能从镜像源获取依赖包,从https://gcc.gnu.org/pub/gcc/infrastructure/获取对应的压缩包,解压拷贝到gcc-build-7.3.0目录
安装依赖包yum install m4、
yum install gcc-c++、yum install texinfo
(3)编译安装依赖包(需按顺序安装,有依赖)
安装gmp:
cd gmp-6.1.0
./configure --prefix=/usr/local/gmp
make -j4 && make check && make install
将gmp.h拷贝到/usr/include下、so拷贝到/usr/lib64
安装mpfr:
cd mpfr-3.1.4
./configure --prefix=/user/mpfr-3.1.6/mpfr-3.1.4-obj --with-gmp=/usr/local/gmp
make -j4 && make install
安装mpc
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/user/mpfr-3.1.4/mpfr-3.1.4-obj
make -j4 && make install
安装isl
cd isl-0.16.1
./configure --prefix=/usr/local/isl --with-gmp=/usr/local/gmp --with-mpfr=/user/mpfr-3.1.4/mpfr-3.1.4-obj --with-mpc=/usr/local/mpc
make -j4 && make install
(4)配置 :
在/usr/local/gcc/gcc 7.3.0目录执行:
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp --with-mpfr=/user/mpfr-3.1.6/mpfr-3.1.6-obj --with-mpc=/usr/local/mpc --with-isl=/usr/local/isl
参数解释:
--enable-checking=release //增加一些检查,也可以–disable-checking生成的编译器在编译过程中不做检查;
--enable-languages=c,c++ //让gcc支持的编程语言 ;
--disable-multilib //取消多目标库编译(取消32位库编译)。
(5)make编译
当前目录执行:make -j4
(编译时间较长,耐心等待!!!!!!!)
若编译提示找不到依赖包的动态库,将编译目录下生成的动态库拷贝到/usr/lib64目录再重新编译;
make install -j4
(6)卸载旧版本的gcc,安装gcc7.3.0
rpm -q gcc
rpm -q gcc-c++
根据执行输出的包名执行
rpm -e [包名]
[root@localhost ~]# rpm -q gcc
gcc-4.8.5-28.el7_5.1.aarch64
[root@localhost ~]# rpm -q gcc-c++
gcc-c++-4.8.5-28.el7_5.1.aarch64
[root@localhost ~]# rpm -e gcc-c++-4.8.5-28.el7_5.1.aarch64
[root@localhost ~]# rpm -e gcc-4.8.5-28.el7_5.1.aarch64
(7)更新bin
更新默认路径下的gcc g++ bin
/usr/sbin/update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc/bin/aarch64-unknown-linux-gnu-gcc-7.3.0 73
/usr/sbin/update-alternatives --install /usr/bin/g++ g++ /usr/local/gcc/bin/aarch64-unknown-linux-gnu-g++ 73
更新默认路径下的so
[root@localhost ~]# find / -name "libstdc++.so*"
/usr/lib/gcc/aarch64-redhat-linux/4.8.2/libstdc++.so
/usr/local/gcc/gcc-7.3.0/prev-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24
cp /usr/local/gcc/gcc-7.3.0/aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 /usr/lib64/
cd /usr/lib64/
rm -rf libstdc++.so.6.0.19
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.24 libstdc++.so.6
(8)验证
[root@localhost ~]# gcc -v
gcc version 7.3.0 (GCC)
[root@localhost ~]# g++ -v
gcc version 7.3.0 (GCC)
[root@localhost ~]# which gcc
/usr/local/bin/gcc
[root@localhost ~]#
安装成功!!!
========================================*如何还原旧版本*=========================================
(1)查看当前gcc版本号
$: gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/7.3.0/lto-wrapper
Target: aarch64-unknown-linux-gnu
Configured with: ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 7.3.0 (GCC)
$: g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/7.3.0/lto-wrapper
Target: aarch64-unknown-linux-gnu
Configured with: ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 7.3.0 (GCC)
(2)查看旧版本的安装包
$: rpm -q gcc
package gcc is not installed
$: rpm -q g++
package g++ is not installed
(3)yum直接安装
$: yum install gcc gcc-c++
如果:
rpm -q gcc和rpm -q g++有安装包,则只需配置/etc/profile文件中加
#gcc
export PATH=$PATH:/usr/bin
进入/usr/local/bin目录,mv gcc ~和mv g++ ~
执行source /etc/profile
验证gcc是否更换
最后将~/目录下的gcc和g++移动到/usr/local/bin