CentOS7离线安装GCC9.3.0(亲测)

目录

前言

安装文件下载

离线安装

安装GMP

安装MPFR

安装MPC

安装ISL-0.24

安装GCC-9.3.0

配置环境变量

更新动态库

参考资料


前言

       安装CentOS7后,系统会默认安装GCC4.8.5(可执行文件位于 /usr/bin 目录,头文件位于 /usr/include 目录,库文件位于 /usr/lib 目录)。但有些C/C++源代码需要较高版本编译器才能编译,且服务器还在公司内网,不能在线升级编译器。本文主要介绍如何在不删除原编译器的条件下,离线安装GCC9.3.0。

安装文件下载

       GCC依赖四个库:GMP、MPFR、MPC、ISL。GMP:计算任意精度的数学库, 包括支持整数,有理数和浮点。MPFR: 一个多精度高效的浮点计算C语言库, 基于GMP。MPC:一个支持高精度复数的算术运算的C库,并能正确的进行结果舍入。ISL:用于操作集合和线性约束下的整数点的关系的库,支持集合的交,并和补操作。

      其中,MPFR依赖GMP,MPC依赖GMP和MPFR,GCC依赖上面四个库,所以推荐的编译安装顺序是GMP->MPFR->MPC->ISL->GCC。

      我们选择下载如下版本,且给出了下载地址:

离线安装

安装GMP

        将下载的gmp-6.2.1.tar.xz解压缩到/home目录(/home/gmp-6.2.1),为了便于后续管理,新建 /usr/local/gmp-6.2.1 目录,并将gmp库安装于此目录,安装指令如下:

cd /home/gmp-6.2.1

./configure --prefix=/usr/local/gmp-6.2.1

make  -j8

make  install  -j8

安装MPFR

        将下载的mpfr-4.2.0.tar.xz解压缩到/home目录(/home/mpfr-4.2.0),新建 /usr/local/mpfr-4.2.0 目录,并将mpfr库安装于此目录,安装指令如下:

cd /home/mpfr-4.2.0

./configure --prefix=/usr/local/mpfr-4.2.0 --with-gmp-include=/usr/local/gmp-6.2.1/include --with-gmp-lib=/usr/local/gmp-6.2.1/lib

make  -j8

make  install  -j8

        由于MPFR库依赖GMP库,因此需要–with命令指定GMP库的头文件目录和库文件目录。

安装MPC

        将下载的mpc-1.3.1.tar.xz解压缩到/home目录(/home/mpc-1.3.1),新建 /usr/local/mpc-1.3.1 目录,并将mpc库安装于此目录,安装指令如下:

cd /home/mpc-1.3.1

./configure --prefix=/usr/local/mpc-1.3.1 --with-gmp-include=/usr/local/gmp-6.2.1/include --with-gmp-lib=/usr/local/gmp-6.2.1/lib  --with-mpfr-include=/usr/local/mpfr-4.2.0/include --with-mpfr-lib=/usr/local/mpfr-4.2.0/lib

make  -j8

make  install  -j8

        由于MPC库依赖GMP库和MPFR库,因此需要–with命令指定GMP库和MPFR库的头文件目录和库文件目录。

安装ISL-0.24

        将下载的isl-0.24.tar.bz2解压缩到/home目录(/home/isl-0.24),新建 /usr/local/isl-0.24 目录,并将isl库安装于此目录,安装指令如下:

cd /home/isl-0.24.

./configure --prefix=/usr/local/isl-0.24  --with-gmp-prefix=/usr/local/gmp-6.2.1

make  -j8

make  install  -j8

安装GCC-9.3.0

        安装gcc之前,需将前面安装的依赖库路径配置到环境变量中,否则会提示找不到相关依赖库。

export LD_LIBRARY_PATH=/usr/local/gmp-6.2.1/lib:/usr/local/mpfr-4.2.0/lib:/usr/local/mpc-1.3.1/lib:/usr/local/isl-0.24/lib:$LD_LIBRARY_PATH

       将下载的gcc-9.3.0.tar.xz解压缩到/home目录(/home/gcc-9.3.0),新建 /usr/local/gcc-9.3.0 目录,并将gcc库安装于此目录,安装指令如下:

--enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3

cd /home/gcc-9.3.0

./configure --prefix=/usr/local/gcc-9.3.0 --with-gmp=/usr/local/gmp-6.2.1/  --with-mpfr=/usr/local/mpfr-4.2.0  --with-mpc=/usr/local/mpc-1.3.1 --with-isl=/usr/local/isl-0.24 --disable-multilib

make  -j8

make  install  -j8

在configure环节,不同系统可能会报错,根据提示增加编译选项即可。

配置环境变量

        在文件/etc/profile中最后添加一行,内容如下:

export PATH=/usr/local/gcc-9.3.0/bin:$PATH

        使其立即生效:

source /etc/profile

更新动态库

        不更新动态库,会导致编译成功的新程序,运行时报错。

原因是因为升级GCC后相应的动态库没有更新,导致新编译器编译程序成功,运行不成功。

  • 使用如下命令,你会发现当前库是一个软链接

ls -l /usr/lib64/libstdc++.so.6

  • 使用如下命令,查看动态库,你会发现版本太低

strings /usr/lib64/libstdc++.so.6.0.19 | grep CXXABI

  • 更新gcc-9.3.0安装目录下的相应动态库到/usr/lib64目录下。

        先删除/usr/lib64/libstdc++.so.6,再重新创建软链接:

ln -s /usr/local/gcc-9.3.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6

        更新gcc、g++链接。首先备份gcc4.8.5,如下:

mv /usr/bin/gcc /usr/bin/gcc-4.8.5

mv /usr/bin/g++ /usr/bin/g++-4.8.5

        创建gcc-9.3.0链接,如下:

ln -s /usr/local/gcc-9.3.0/bin/gcc /usr/bin/gcc

ln -s /usr/local/gcc-9.3.0/bin/g++ /usr/bin/g++

         至此,gcc-9.3.0安装完成。使用如下命令查看版本:

gcc  -v

参考资料