最重要的事情提前说:
为了降低风险,注意备份或者克隆保存虚拟机状态
在 centos 的开发环境下, 有时会遇到 gcc 版本升级或切换的问题,这里介绍2种方式,这里比较推荐第二种
方法一
下载对应版本的 gcc 源码,而编译源码首先需要本地拥有编译器
yum install -y gcc
yum install -y gcc-c++
yum install -y wget
yum install -y cmake
...
第一步,做一些编译前的准备工作,我这里以 5.4.0 版本为例,
cd /root
wget http:
tar xvf gcc-5.4.0.tar.bz2
cd /root/gcc-5.4.0
第二步,下载编译 gcc 的依赖项, gcc 中编写了下载依赖项的工具
./contrib/download_prerequisites
这里如果没有报错最好,如果有报错大概率是登录 ftp 失败导致的下载失败,所以这里我的解决方案是修改一下这个下载工具,将 ftp 下载链接换成 http 的链接即可,只要修改地址的前缀
vi ./contrib/download_prerequisites
第三步,设置编译输出路径,生成 Makefile 文件
mkdir build
cd build
../configure -prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
第四步,编译和编译安装
make
make install
最后一步,调整环境变量
ln -sv /usr/local/include/ /usr/include/gcc
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/gcc.conf
还有一种方式修改环境变量
vi /etc/profile, 追加
export PATH=/usr/local/bin:$PATH
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
当然这些追加的地址根据实际执行 configure 时配置的路径自己修改
方法二
首先需要介绍一下 Centos 下的软件集 Software Collections(SCL) ,它是一个Linux软件多版本共存的解决方案。它为用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个版本的方式,同时避免把系统搞乱。
第一步,安装 SCL 工具和 SCL 软件源
sudo yum install scl-utils
sudo yum install centos-release-scl
第二步,查看 SCL 软件源下提供哪些软件集
yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset"
大致结果如下
devtoolset-8-binutils.x86_64 2.30-55.el7.2 @centos-sclo-rh
devtoolset-8-dwz.x86_64 0.12-1.1.el7 @centos-sclo-rh
devtoolset-8-elfutils.x86_64 0.176-1.el7 @centos-sclo-rh
devtoolset-8-elfutils-libelf.x86_64 0.176-1.el7 @centos-sclo-rh
devtoolset-8-elfutils-libs.x86_64 0.176-1.el7 @centos-sclo-rh
devtoolset-8-gcc.x86_64 8.3.1-3.2.el7 @centos-sclo-rh
devtoolset-8-gcc-c++.x86_64 8.3.1-3.2.el7 @centos-sclo-rh
devtoolset-8-gcc-gfortran.x86_64 8.3.1-3.2.el7 @centos-sclo-rh
devtoolset-8-gdb.x86_64 8.2-3.el7 @centos-sclo-rh
devtoolset-8-libquadmath-devel.x86_64 8.3.1-3.2.el7 @centos-sclo-rh
devtoolset-8-libstdc++-devel.x86_64 8.3.1-3.2.el7 @centos-sclo-rh
devtoolset-8-ltrace.x86_64 0.7.91-1.el7 @centos-sclo-rh
devtoolset-8-make.x86_64 1:4.2.1-4.el7 @centos-sclo-rh
devtoolset-8-memstomp.x86_64 0.1.5-5.el7 @centos-sclo-rh
devtoolset-8-runtime.x86_64 8.1-1.el7 @centos-sclo-rh
devtoolset-8-strace.x86_64 4.24-4.el7 @centos-sclo-rh
devtoolset-8-toolchain.x86_64 8.1-1.el7 @centos-sclo-rh
...
第三步,安装需要的工具链
sudo yum install -y devtoolset-8-toolchain
这里简单介绍一下不同工具链对应的 gcc 版本, 目前我只下载过 devtoolset-7-toolchain 和 devtoolset-8-toolchain , 其它工具链版本对应的 gcc 版本是参考其他博主们
工具链版本 | gcc 版本 |
---|
devtoolset-3-toolchain | 4.9.2 | devtoolset-4-toolchain | 5.3.1 | devtoolset-6-toolchain | 6.3.1 | devtoolset-7-toolchain | 7.3.1 | devtoolset-8-toolchain | 8.3.1 |
第四步,启用高版本 gcc
sudo scl enable devtoolset-8 bash
gcc –v
exit
可以这样理解 SCL,它将新版本的开发工具库与系统旧的库位置隔离开 新安装的开发工具库,默认保存在路径 /opt/rh/devtoolset-*/root/usr/bin 中 *(代表版本) 在执行 sudo scl enable devtoolset-* bash 时,将上述的路径 export 进 PATH 的最前面,这样项目编译时寻找的 gcc 等库也会优先在其中找 exit 从环境变量中移除即可,丝毫不印象系统原来的环境
|