跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

CentOS 升级 GCC 至 10.1.0 源码编译指南

CentOS 系统默认 GCC 版本较低,无法满足新版软件(如 Redis)编译需求时,可通过源码编译方式升级至 GCC 10.1.0。操作前需确保 glibc 版本大于等于 2.17 并准备充足磁盘空间。主要步骤包括下载依赖包(gmp、isl、mpfr、mpc)、解压配置、编译安装及备份旧版本。过程中可能遇到共享库缺失或路径问题,需根据错误提示安装对应依赖或调整 glibc 版本。

道系青年发布于 2023/5/9更新于 2026/9/1768 浏览
CentOS 升级 GCC 至 10.1.0 源码编译指南

背景

CentOS 6.5、CentOS 7 操作系统中安装的默认 GCC 版本为 4.4.7。在编译最新版本 Redis 时会提示相关 C++ 函数的错误,因此需要将 GCC 升级至较高版本。本文以 CentOS 6.5 为例,将 GCC 升级至 gcc-10.1.0,使用源码编译方式进行。

准备工作

  1. glibc 需要 2.17 及以上版本,不满足需要先升级 glibc,否则将会缺少定义函数。
  2. 20G 以上的硬盘空间。
  3. bzip2 命令可用,如果不可用需要安装 bzip2。
  4. gcc-10.1.0.tar.gz 源码包,下载地址:http://ftp.gnu.org/gnu/gcc/。
  5. gcc 10.1.0 编译时需要依赖的包:gmp-6.1.0.tar.bz2, isl-0.18.tar.bz2, mpfr-3.1.4.tar.bz2, mpc-1.0.3.tar.gz。下载地址:https://gcc.gnu.org/pub/gcc/infrastructure/, 依次找到下载即可。

编译源码

将上述压缩包下载好之后,上传到需要升级的 Linux 服务器中,使用下面的命令进行解压至 /usr/local/gcc-10.1.0 文件夹中。

# 解压
tar -zvxf gcc-10.1.0.tar.gz --directory=/usr/local/
tar -jvxf gmp-6.1.0.tar.bz2 --directory=/usr/local/gcc-10.1.0/
tar -jvxf isl-0.18.tar.bz2 --directory=/usr/local/gcc-10.1.0/
tar -jvxf mpfr-3.1.4.tar.bz2 --directory=/usr/local/gcc-10.1.0/
tar -zxvf mpc-1.0.3.tar.gz --directory=/usr/local/gcc-10.1.0/

# 创建软连接
cd /usr/local/gcc-10.1.0/
ln -sf gmp-6.1.0 gmp
ln -sf isl-0.18 isl
ln -sf mpc-1.0.3 mpc
ln -sf mpfr-3.1.4 mpfr

# 以上四个依赖分别执行 ./configure && make && make install
# 继续执行 configure,如果报错看下面可能遇到的问题
./configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --disable-multilib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-initfini-array --enable-gnu-indirect-function

# 进行 make 操作,这个时间比较长,要注意这里是否产生编译失败的信息
make -j4

编译成功后一定要备份老的版本:

mv /usr/bin/gcc /usr/bin/gcc485
mv /usr/bin/g++ /usr/bin/g++485
mv /usr/bin/c++ /usr/bin/c++485
mv /usr/bin/cc /usr/bin/cc485
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak

# 进行 install
make install

# 验证 gcc 版本是否成功
gcc -v

替换已安装的 GCC

# 找到 gcc 的已安装目录
find / -name gcc -print
# 输出示例:/usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /opt/rh/devtoolset-9/root/usr/bin/gcc

由于之前是 yum 方式安装过 devtoolset-9 版本,因此替换操作如下:

# gcc931 版本备份
cd /opt/rh/devtoolset-9/root/usr/bin
mv /opt/rh/devtoolset-9/root/usr/bin/gcc gcc931
mv /opt/rh/devtoolset-9/root/usr/bin/g++ g++931
mv /opt/rh/devtoolset-9/root/usr/bin/c++ c++931
mv /opt/rh/devtoolset-9/root/usr/bin/cc cc931

# 创建软连接,使用新版 gcc
ln -s /usr/bin/gcc /opt/rh/devtoolset-9/root/usr/bin/gcc
ln -s /usr/bin/g++ /opt/rh/devtoolset-9/root/usr/bin/g++
ln -s /usr/bin/c++ /opt/rh/devtoolset-9/root/usr/bin/c++

# 验证
gcc -v

总结

一定要保留和备份原来的 GCC 环境,只有新的 GCC 环境编译成功后再进行安装操作,然后在使用新的 GCC 进行替换。在编译 GCC 的过程中可能会遇到比较多的依赖问题、权限问题等,需要及时对这些指定的问题进行处理。大多数情况下 CentOS 6.5、CentOS 7 都可以成功升级。

常见问题

问题 1:error while loading shared libraries libisl.so.15

# 需要安装 isl-0.15.tar.bz2
tar -jxvf isl-0.15.tar.bz2
./configure
make
make install

问题 2:No usable m4 in $PATH or /usr/5bin

# 需要安装 m4 依赖,这里直接用 yum 了,应该也可以源码安装
yum install m4

问题 3:bzip2: Cannot exec: No such file or directory

# 需要安装 bzip2 依赖
tar -zvxf bzip2-1.0.6.tar.gz
mkdir /data/java/bzip2
make && make install PREFIX=/data/java/bzip2
bzip2
chmod 777 /data/java/bzip2/bin/bzip2
ln -s /data/java/bzip2/bin/bzip2 /usr/local/bin/bzip2
ln -s /usr/local/bin/bzip2 /usr/bin/bzip2

问题 4:compiler can't find 'aligned_alloc' function

# 这个问题困扰较长时间,最后发现是因为 glibc 版本过低导致,这个函数只有在 >=glibc2.17 版本中提供。要是 glibc 版本不够还是要升级一下。这个函数是 since C++17 才有的,所以新版本的 GCC 使用这个函数时肯定找不到。确保 ldd 显示的版本正确后,再重新对 gcc 进行 make。
# 这里也可以进行源码升级 glibc
yum install glibc
[root@localhost gcc-10.1.0]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

目录

  1. 背景
  2. 准备工作
  3. 编译源码
  4. 解压
  5. 创建软连接
  6. 以上四个依赖分别执行 ./configure && make && make install
  7. 继续执行 configure,如果报错看下面可能遇到的问题
  8. 进行 make 操作,这个时间比较长,要注意这里是否产生编译失败的信息
  9. 进行 install
  10. 验证 gcc 版本是否成功
  11. 替换已安装的 GCC
  12. 找到 gcc 的已安装目录
  13. 输出示例:/usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /opt/rh/devtoolset-9/root/usr/bin/gcc
  14. gcc931 版本备份
  15. 创建软连接,使用新版 gcc
  16. 验证
  17. 总结
  18. 常见问题
  19. 问题 1:error while loading shared libraries libisl.so.15
  20. 需要安装 isl-0.15.tar.bz2
  21. 问题 2:No usable m4 in $PATH or /usr/5bin
  22. 需要安装 m4 依赖,这里直接用 yum 了,应该也可以源码安装
  23. 问题 3:bzip2: Cannot exec: No such file or directory
  24. 需要安装 bzip2 依赖
  25. 问题 4:compiler can't find “aligned_alloc” function
  26. 这个问题困扰较长时间,最后发现是因为 glibc 版本过低导致,这个函数只有在 >=glibc2.17 版本中提供。要是 glibc 版本不够还是要升级一下。这个函数是 since C++17 才有的,所以新版本的 GCC 使用这个函数时肯定找不到。确保 ldd 显示的版本正确后,再重新对 gcc 进行 make。
  27. 这里也可以进行源码升级 glibc

更多推荐文章

查看全部
  • WhisperLiveKit 实时语音识别:安装、配置与生产部署
  • MiniMax-M2.5 模型发布:编程与智能体性能突破
  • C/C++ 轻量级搜索引擎实战:正/倒排索引构建
  • OpenClaw 开源 AI Agent 框架技术解析与架构设计
  • Copilot 最佳使用方式与深度配置指南
  • 基于 Whisper 与 pyannote.audio 构建说话人分离转写系统
  • 基于Python+Requests+Allure搭建接口自动化框架
  • SELF 指令集自动化构建原理与实现
  • AI 时代产品经理:厘清 AI 能力边界与技术限制
  • 三款主流云电脑部署 DeepSeek 模型性能对比评测
  • OpenClaw Web UI 无法访问 Not Found 问题排查
  • Docker 本地部署 Dify 开源 LLM 应用平台教程
  • Spring AI RAG 检索实战:构建企业级私有知识库
  • 红黑树的底层原理及 C++ 实现
  • WeBASE 一键部署配置与下载问题解决方案
  • Kiro AI 助手完整使用指南
  • C++ IDE 选型指南:主流工具对比与新手避坑建议
  • 前端监控最佳实践
  • 本地Qwen与ComfyUI制作AI漫剧教程
  • SQL Server 2008 R2 安装教程及常见错误解决方案

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online