CentOS 7 升级安装 GCC 9.5 完全教程
前言
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 源
sudo yum install -y centos-release-scl
2. 安装 GCC 9
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
3. 启用 GCC 9
临时启用(仅当前 shell 会话有效):
scl enable devtoolset-9 bash
或者使用 source 命令:
source /opt/rh/devtoolset-9/enable
4. 永久启用 GCC 9(可选)
如果希望每次登录都使用 GCC 9,可以将启用命令添加到 ~/.bashrc:
echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc
source ~/.bashrc
5. 验证安装
gcc --version
# 应显示:gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
方法二:从源码编译安装 GCC 9.5
如果需要精确的 9.5 版本或者 SCL 源不可用,可以从源码编译安装。这种方式更灵活,但编译时间较长(约 30-60 分钟)。
1. 安装编译依赖
sudo yum groupinstall -y "Development Tools"
sudo yum install -y gmp-devel mpfr-devel libmpc-devel zlib-devel bzip2
2. 下载 GCC 9.5 源码
cd /usr/local/src
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.xz
tar -xf gcc-9.5.0.tar.xz
cd gcc-9.5.0
3. 下载依赖组件
GCC 编译需要 GMP、MPFR、MPC 三个依赖库,源码包中提供了自动下载脚本:
./contrib/download_prerequisites
4. 创建编译目录并配置
注意:GCC 官方推荐在源码目录之外进行编译(out-of-source build)。
mkdir -p ../gcc-9.5-build
cd ../gcc-9.5-build
../gcc-9.5.0/configure --enable-languages=c,c++ --disable-multilib --prefix=/usr/local/gcc-9.5
配置参数说明:
--enable-languages=c,c++:只编译 C 和 C++ 编译器,节省编译时间和空间--disable-multilib:不生成 32 位代码,64 位系统通常不需要--prefix=/usr/local/gcc-9.5:安装路径,避免与系统 GCC 冲突
5. 编译和安装
使用多核编译加速(-j$(nproc) 使用所有 CPU 核心):
make -j$(nproc)
sudo make install
编译完成后,验证安装:
/usr/local/gcc-9.5/bin/gcc --version
# 应显示:gcc (GCC) 9.5.0
6. 配置系统使用新 GCC
有两种方式让系统使用新版本的 GCC:
方式 A:创建符号链接(推荐)
sudo mv /usr/bin/gcc /usr/bin/gcc.bak
sudo mv /usr/bin/g++ /usr/bin/g++.bak
sudo ln -s /usr/local/gcc-9.5/bin/gcc /usr/bin/gcc
sudo ln -s /usr/local/gcc-9.5/bin/g++ /usr/bin/g++
sudo ln -s /usr/local/gcc-9.5/bin/c++ /usr/bin/c++
方式 B:使用 alternatives 管理多版本
sudo alternatives --install /usr/bin/gcc gcc /usr/local/gcc-9.5/bin/gcc 90
sudo alternatives --install /usr/bin/gcc gcc /usr/bin/gcc.bak 40
sudo alternatives --install /usr/bin/g++ g++ /usr/local/gcc-9.5/bin/g++ 90
sudo alternatives --install /usr/bin/g++ g++ /usr/bin/g++.bak 40
使用 sudo alternatives --config gcc 可以切换默认版本。
7. 配置动态链接库
编译源码版 GCC 后,还需要配置动态链接库路径,否则运行新编译的程序时可能报错 libstdc++.so.6: version 'GLIBCXX_3.4.26' not found。
echo "/usr/local/gcc-9.5/lib64" | sudo tee /etc/ld.so.conf.d/gcc-9.5.conf
sudo ldconfig
验证动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
# 应该能看到 GLIBCXX_3.4.26 及更高版本
常见问题与解决方案
1. 编译时提示内存不足
如果服务器内存较小(如 2GB),编译 GCC 时可能因内存不足而失败。可以添加 swap 分区:
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
sudo mkswap /swapfile
sudo swapon /swapfile
编译完成后可以移除:
sudo swapoff /swapfile
sudo rm /swapfile
2. 编译时提示 gmp/mpfr/mpc 版本过低
确保已运行 ./contrib/download_prerequisites 下载正确版本的依赖库。如果仍然报错,可以手动安装:
# 安装 GMP 6.1.0
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-6.1.2.tar.xz
tar -xf gmp-6.1.2.tar.xz && cd gmp-6.1.2
./configure --prefix=/usr/local/gmp && make -j$(nproc) && sudo make install
cd ..
# 安装 MPFR 4.0.2
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-4.0.2.tar.xz
tar -xf mpfr-4.0.2.tar.xz && cd mpfr-4.0.2
./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp && make -j$(nproc) && sudo make install
cd ..
# 安装 MPC 1.1.0
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/mpc-1.1.0.tar.gz
tar -xf mpc-1.1.0.tar.gz && cd mpc-1.1.0
./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr && make -j$(nproc) && sudo make install
cd ..
然后重新配置 GCC:
../gcc-9.5.0/configure --enable-languages=c,c++ --disable-multilib \
--prefix=/usr/local/gcc-9.5 \
--with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc
3. 编译的程序运行时提示 libstdc++.so 版本问题
确认已执行 sudo ldconfig,并检查 libstdc++.so.6 是否指向新版本:
ls -l /usr/lib64/libstdc++.so.6
# 如果指向旧版本,需要更新链接:
sudo cp /usr/local/gcc-9.5/lib64/libstdc++.so.6.0.27 /usr/lib64/
cd /usr/lib64
sudo rm libstdc++.so.6
sudo ln -s libstdc++.so.6.0.27 libstdc++.so.6
4. SCL 方式安装后 gcc 版本未变化
SCL 安装的 GCC 不会自动替换系统默认版本,需要手动启用:
source /opt/rh/devtoolset-9/enable
gcc --version # 确认版本已更新
总结
对于大多数用户,推荐使用 SCL 源安装 devtoolset-9,简单安全且不影响系统稳定性。如果需要精确的 GCC 9.5 版本或 SCL 源不可用,则从源码编译安装。
升级 GCC 后,建议重新编译依赖 GCC 的项目以确保兼容性。在生产环境操作前,请务必在测试环境中验证。







