乐趣区

CentOS-7上升级安装gcc

转载请注明文章出处:https://tlanyan.me/install-up…

CentOS 7 官方源带的 gcc 最新版本是 4.8.5,发布于 2015 年,年代久远且不支持 c ++14。要编译 c ++14 及以上项目,必须要升级现有版本或者安装高版本的 gcc。

问题的解决办法主要有两种:手动编译安装(也可以从其他机器拷贝或者网上下载),或从源安装。大多数情况下本人都不推荐从源码编译,因为过程中常会出现各种依赖问题需要人工手动解决,费时(单核编译 gcc 至少一小时)且耗费精力,并且软件升级还要再来一次,相当的折腾。鉴于此下文介绍从源安装的方法。

红帽其实已经编译好了高版本的 gcc,但未更新到 base 和 epel 这两个常用的源中,而是放在 scl 中。第一步便是安装scl

yum install -y centos-release-scl

如果你之前用过 grouplist/install 等命令,应该知道 gcc 包含在 Development Tools 这个组中。那么 scl 中的 gcc/g++ 软件包的前缀都是devtoolset,也就不难理解了。安装 gcc 6 版本的命令是:

yum install -y devtoolset-6-gcc devtoolset-6-gcc-c++

devtoolset-6中的 gcc 版本为 gcc 6,除此之外还有如下版本:

  • devtoolset-3: gcc 4.9
  • devtoolset-4: gcc 5
  • devtoolset-6: gcc 6
  • devtoolset-7: gcc 7
  • devtoolset-8: gcc 8

至于为什么没有 devtoolset-5,我也不清楚,估计是包含在 devtoolset- 4 中了吧。值得说明的是这些软件包可以同时安装,不会相互覆盖和冲突,也不会覆盖系统的版本。即可以在系统中同时安装 gcc 6, gcc 7, gcc 8 等多个版本。

因为不会覆盖系统默认的 gcc,使用这些软件的方法有四种:

  1. 使用绝对路径;
  2. 添加可执行文件路径到 PATH 环境变量;
  3. 使用官方推荐的加载命令:scl enable devtoolset-x bash, x 为要启用的版本;
  4. 执行安装软件自带的脚本:source /opt/rh/devtoolset-x/enable,x 为要启用的版本。

推荐使用最后两种方式,例如启用 gcc 6: source /opt/rh/devtoolset-6/enable,然后输入 gcc -v 查看版本已经变成 gcc 6.3.1。使用类似的命令可以随时在多个 gcc 版本中切换。如果希望长期使用高版本,可将此命令写入 .bashrc 等配置文件。

最后说一下,scl 以及 scl-rh 源中的软件包都安装在 /opt/rh/ 目录下,包含可执行文件、配置等。所以启用命令的路径是/opt/rh/xxx/enable,安装的服务重启命令则可能是systemctl restart rh-xxx,需要加 rh 或 scl 前缀以区别其他源的包。如果你用过 remi/gitlab 等源,其行为方式也是类似的。

参考

  1. https://www.softwarecollectio…
退出移动版