前言
CentOS 7 默认提供的 GCC 版本为 4.8.5,这个版本发布于 2015 年,已经无法满足现代 C/C++ 项目的编译需求。许多开源项目(如 MySQL 8.0、Redis 7、QEMU 等)都要求 GCC 5.1 甚至更高版本。本文将详细介绍如何在 CentOS 7 上安全地升级安装 GCC 9.5 版本。
GCC 9.5 是 GCC 9 系列的最终版本,支持 C++17 标准,同时保持了较好的稳定性和兼容性,是 CentOS 7 环境下升级 GCC 的推荐选择。
方法一:使用 SCL 源安装(推荐,最简单)
CentOS 提供了 Software Collections (SCL) 源,其中包含高版本的 GCC。这是最简单、最安全的安装方式,不会覆盖系统默认的 GCC。
1. 安装 SCL 源
2. 安装 GCC 9
3. 启用 GCC 9
临时启用(仅当前 shell 会话有效):
或者使用 source 命令:
4. 永久启用 GCC 9(可选)
如果希望每次登录都使用 GCC 9,可以将启用命令添加到 ~/.bashrc:
5. 验证安装
方法二:从源码编译安装 GCC 9.5
如果需要精确的 9.5 版本或者 SCL 源不可用,可以从源码编译安装。这种方式更灵活,但编译时间较长(约 30-60 分钟)。
1. 安装编译依赖
2. 下载 GCC 9.5 源码
3. 下载依赖组件
GCC 编译需要 GMP、MPFR、MPC 三个依赖库,源码包中提供了自动下载脚本:
4. 创建编译目录并配置
注意:GCC 官方推荐在源码目录之外进行编译(out-of-source build)。
配置参数说明:
--enable-languages=c,c++:只编译 C 和 C++ 编译器,节省编译时间和空间--disable-multilib:不生成 32 位代码,64 位系统通常不需要--prefix=/usr/local/gcc-9.5:安装路径,避免与系统 GCC 冲突
5. 编译和安装
使用多核编译加速(-j$(nproc) 使用所有 CPU 核心):
编译完成后,验证安装:
6. 配置系统使用新 GCC
有两种方式让系统使用新版本的 GCC:
方式 A:创建符号链接(推荐)
方式 B:使用 alternatives 管理多版本
使用 sudo alternatives --config gcc 可以切换默认版本。
7. 配置动态链接库
编译源码版 GCC 后,还需要配置动态链接库路径,否则运行新编译的程序时可能报错 libstdc++.so.6: version 'GLIBCXX_3.4.26' not found。
验证动态库:
常见问题与解决方案
1. 编译时提示内存不足
如果服务器内存较小(如 2GB),编译 GCC 时可能因内存不足而失败。可以添加 swap 分区:
编译完成后可以移除:
2. 编译时提示 gmp/mpfr/mpc 版本过低
确保已运行 ./contrib/download_prerequisites 下载正确版本的依赖库。如果仍然报错,可以手动安装:
然后重新配置 GCC:
3. 编译的程序运行时提示 libstdc++.so 版本问题
确认已执行 sudo ldconfig,并检查 libstdc++.so.6 是否指向新版本:
4. SCL 方式安装后 gcc 版本未变化
SCL 安装的 GCC 不会自动替换系统默认版本,需要手动启用:
总结
对于大多数用户,推荐使用 SCL 源安装 devtoolset-9,简单安全且不影响系统稳定性。如果需要精确的 GCC 9.5 版本或 SCL 源不可用,则从源码编译安装。
升级 GCC 后,建议重新编译依赖 GCC 的项目以确保兼容性。在生产环境操作前,请务必在测试环境中验证。