因为 edk2 等需求,需要将现有的 Linux CentOS 7.6 的 gcc 版本修改成 5 。查阅了一些相关资料,整合了自己的问题,现将完整步骤和遇到的问题记录下来下(●'◡'●)【摸鱼x 学习√】
查看当前 gcc 版本:gcc --version
[root@localhost ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
题外话:查找资料显示,一般默认都自带 gcc ,版本为 4.8.5 。如果 Linux 经验比较多的大佬,要下别的版本的 gcc 可以直接移步这里,找到相应的 gcc 版本和依赖下载安装即可:
http://ftp.gnu.org/gnu/gcc/
回到正题,以下是我的方法,尽可能简单详细,安装版本为 gcc-5.3.0 。
1.找一个目录作为待会下载安装的根据地,比如我用的是 /opt ,切换目录:
cd /opt
2.然后用这个方法下载,相对简单,下载 gcc-5.3.0 安装包:
wget http://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz
3.下载完成后解压:
tar -zxf gcc-5.3.0.tar.gz
4.创建安装目录,切换到此目录:
mkdir /usr/local/gcc-5.3.0/
cd /usr/local/gcc-5.3.0/
5.配置安装:
/opt/gcc-5.3.0/configure -prefix=/usr/local/gcc-5.3.0
这个时候会报错,是正常的,因为它没依赖,找一下 error 中有这么一句:
借此机会我们能知道他需要什么依赖以及依赖的版本,GMP4.2,MPFR2.4.0,MPC0.8.0。
6.回到 opt ,下载并所需的依赖:
cd /opt
7.首先是 GMP4.3.2 ,下载、解压、创建目录、切换目录、配置安装、编译、安装:
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
tar jxvf gmp-4.3.2.tar.bz2
mkdir /usr/local/gmp-4.3.2
cd /usr/local/gmp-4.3.2
/opt/gmp-4.3.2/configure -prefix=/usr/local/gmp-4.3.2
make
make install
8.然后是 MPFR2.4.2 :
cd /opt
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
tar jxvf mpfr-2.4.2.tar.bz2
mkdir /usr/local/mpfr-2.4.2
cd /usr/local/mpfr-2.4.2
/opt/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make install
9.最后是 MPC0.8.1 :
cd /opt
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar -zxf mpc-0.8.1.tar.gz
mkdir /usr/local/mpc-0.8.1
cd /usr/local/mpc-0.8.1
/opt/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2
make
make install
10.三个依赖都安装完,回来重新进行 gcc 配置安装:
cd /usr/local/gcc-5.3.0
/opt/gcc-5.3.0/configure --prefix=/usr/local/gcc-5.3.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
11.编译,时间很长可能一小时左右:
make
这个时候我遇到了个奇怪的问题,编译几分钟后出现的,报错如下:
checking for i686-pc-linux-gnu-gcc... /home/hy/下载/gcc-build/./gcc/xgcc -B/home/hy/下载/gcc-build/./gcc/ -B/usr/local/gcc-5.3.0/i686-pc-linux-gnu/bin/ -B/usr/local/gcc-5.3.0/i686-pc-linux-gnu/lib/ -isystem /usr/local/gcc-5.3.0/i686-pc-linux-gnu/include -isystem /usr/local/gcc-5.3.0/i686-pc-linux-gnu/sys-include
checking for suffix of object files... configure: error: in `/home/hy/下载/gcc-build/i686-pc-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[2]: *** [configure-stage1-target-libgcc] Error 1
make[2]: Leaving directory `/home/hy/下载/gcc-build'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/home/hy/下载/gcc-build'
make: *** [all] Error 2...
根据错误提示可以查看 config.log 有更详细的信息。
解决方法是将 mpc 、 gmp 和 mpfr 目录加到环境变量中,在 /etc/profile 文件末尾加上: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib ,之后运行 source /etc/profile
因为这个错,所以重新回到错误之前的步骤删文件再来〒▽〒
12.回到正题,如果编译正常的情况下会进行一小时左右,如果编译完成没有报错,安装:
make install
13.添加 gcc , g++ 软连接:
ln -s /usr/local/gcc-5.3.0/bin/gcc gcc
ln -s /usr/local/gcc-5.3.0/bin/g++ g++
14.添加环境变量:
vim /etc/bashrc
添加如下内容:
#gcc
LD_LIBRARY_PATH=:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/gcc-5.3.0/lib:/usr/local/gcc-5.3.0/lib64
#export LD_LIBRARY_PATH
重新 gcc --version 可以查到 gcc 版本了。
如果这里没有生效,可以试试下面的方法。
查看系统的 PATH
环境变量,确保新版本的 gcc 所在的路径已经被包含在 PATH
中。可以通过以下命令查看 PATH :
echo $PATH
如果你看到新版本的 gcc 所在的路径没有在其中,你需要将它添加到 PATH
变量中。
vim ~/.bashrc
添加如下内容:
export PATH=/usr/local/gcc-5.3.0/bin:$PATH
保存退出后更新它:
source ~/.bashrc
重新查看 gcc --version , gcc 版本更换完成
参考资料:
linux升级gcc版本详细教程_gcc升级_编程砖家的博客-优快云博客
linux编译安装gcc5.3.0 - 菜的掉渣 - 博客园 (cnblogs.com)
【解决方案】Centos6.10升级gcc4.4.7至gcc5.1.0_石头儿啊的博客-优快云博客
ubuntu 16.04 从gcc 5.4 安装gcc 5.3.0_gcc conftest.c_TinaO-O的博客-优快云博客