这个GCC升级操作是在root权限在执行的。主要借鉴了网络上的一些内容,加上自己的一些理解。
网络上升级GCC的方法主要有两种:
1 一种是通过下载GCC源码,编译升级
2 一种是通过centos-release-scl 进行升级,SCL(软件选集)为CentOS的一个第三方库,SCL可以在不覆盖原系统软件包的情况下安装新的软件包与老软件包共存并且可以使用scl命令切换,不过也有个缺点就是只支持64位的。
第一种方式是最基础的方式,无论什么Linux系统,如果想升级 GCC 都可以采用源码编译,但是源码编译,一般比较耗时
第二种方式是一种比较简洁的方式,升级比较迅速
两者各有优劣:
第一种方式可以自定义下载各种版本的GCC源码,进行编译安装,安装结束,该编译版本会自动覆盖原来系统中的GCC,也就是直接就升级了,没办法再切到原GCC的环境,想要再次使用原GCC版本,则需要再次安装;
第二种方式只能下载当前 scl 源中最新的 GCC ,但是安装过后,其实有个好处,也就是您可以在每次打开终端的时候,在原GCC版本和新版本的GCC之间切换,当然也可以持久化为最新的GCC,所以他更灵活一些。
方法1
第一步,下载你需要的gcc源码,点击进入到这个地址去找就可以了。这里我们假设安装的是gcc-4.9.0.tar.gz
第二步,命令解压:
tar -xzvf gcc-4.9.0.tar.gz
然后 cd gcc-4.9.0
第三步,./contrib/download_prerequisites 这一步是下载所需的依赖,由于是国内的网站可能会在线安装不了(如果在线安装成功,直接进入第四步),这里讲下手动安装,其实就是三个依赖gmp-4.3.2.tar.gz,mpfr-2.4.2.tar.gz,mpc-1.0.1.tar.gz,不同版本的gcc可能需要不同的版的,如果出现错误,根据错误提示更换需要的版本即可,这三个依赖最好按照顺序安装,因为它们之间也是有依赖关系的。
1、安装gmp-4.3.2.tar.gz,到这里找你要的版本http://ftp.gnu.org/pub/gnu/gmp/,然后解压tar -xzvf gmp-4.3.2.tar.gz,
然后进入目录 cd gmp-4.3.2,再依次执行./configure --prefix=/usr ,make && make install
2、安装mpfr-2.4.2.tar.gz,到这里找你要的版本https://www.mpfr.org/history.html,然后解压tar -xzvf mpfr-2.4.2.tar.gz,
然后进入目录 cd mpfr-2.4.2,再依次执行./configure --prefix=/usr ,make && make install
3、安装mpc-1.0.1.tar.gz,到这里找你要的版本http://ftp.gnu.org/gnu/mpc/,然后解压tar -xzvf mpc-1.0.1.tar.gz,
然后进入目录 cd mpc-1.0.1,再依次执行./configure --prefix=/usr ,make && make install
第四步,再次回到gcc-4.9.0 目录下,执行:…/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
第五步,执行 make -j4 ,这是启动四个线程来编译gcc,大约需要40分钟左右
第六步,执行 make install
第七步,验证gcc版本,gcc -v ,g++ -v
即可证明安装成功!!!
方法2
今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS 7为4.8。gcc 4.8最主要的一个特性就是全面支持C++11,简单说一些C++11标准的程序都需要gcc 4.8以上版本的gcc编译器编译,如MySQL 8.0版本(8.0.16以上版本是C++14标准,需gcc 5.3以上版本),但是现在很多需要编译的程序,其实GCC版本都会高于系统的初始GCC版本,所以升级GCC是方便开发的基础,这里是讲一下使用 SCL源进行安装。
一般如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-6(devtoolset-6目前gcc版本为6.3),因为devtoolset-4及之前的版本都已经结束支持,只能通过其他方法安装,下面会有介绍。
2.1 分系统版本进行安装
1 升级到gcc 6.3:但注意devtoolset-6已经结束支持,如果现在再要安装GCC可以考虑安装devtoolset-7,但这里先说明下GCC 6
- 安装SCL源
yum -y install centos-release-scl- 安装
yum -y install devtoolset-6-gcc devtoolset-6-gcc-c++ devtoolset-6-binutils- 开启GCC6.3的服务
scl enable devtoolset-6 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。- 如果要长期使用gcc 6.3的话:
echo “source /opt/rh/devtoolset-6/enable” >>/etc/profile
这样退出shell重新打开就是新版的gcc了,也就是永久更新了系统的GCC
以下其他版本同理,修改devtoolset版本号即可。2 升级到gcc 7.3:
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
scl enable devtoolset-7 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 7.3的话:
echo “source /opt/rh/devtoolset-7/enable” >>/etc/profile
3 升级到gcc 8.3:
yum -y install centos-release-scl
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
scl enable devtoolset-7 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 8.3的话:
echo “source /opt/rh/devtoolset-8/enable” >>/etc/profile
4 升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo “source /opt/rh/devtoolset-9/enable” >>/etc/profile
5 再说一下已经停止支持的devtoolset4(gcc 5.2)及之前版本的安装方法
5.1 升级到gcc 4.8:
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtoolset-2.repo
yum -y install devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils
scl enable devtoolset-2 bash
5.2 升级到gcc4.9:
wget https://copr.fedoraproject.org/coprs/rhscl/devtoolset-3/repo/epel-6/rhscl-devtoolset-3-epel-6.repo -O /etc/yum.repos.d/devtoolset-3.repo
yum -y install devtoolset-3-gcc devtoolset-3-gcc-c++ devtoolset-3-binutils
scl enable devtoolset-3 bash
5.3 升级到gcc 5.2:
wget https://copr.fedoraproject.org/coprs/hhorak/devtoolset-4-rebuild-bootstrap/repo/epel-6/hhorak-devtoolset-4-rebuild-bootstrap-epel-6.repo -O /etc/yum.repos.d/devtoolset-4.repo
yum install devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils -y
scl enable devtoolset-4 bash
同样,如果想长期使用升级过的GCC,需要配置这样的一个命令:
echo “source /opt/rh/devtoolset-9/enable” >>/etc/profile
不然就是,每次新打开的终端,需要先使用
scl enable devtoolset- bash 代表升级的版本号(4,5,6,7,8,9)
升级完成后一定要运行:gcc --version 看一下版本号变成升级后的gcc版本才算升级成功。