在 CentOS 上安装 GCC 与常用插件
一、概念澄清
- GCC 插件通常指基于 GCC 的编译器插件或工具链扩展(如 Clang/LLVM 插件、GCC MELT、静态分析/插桩工具等),需要先有可用的 GCC 编译器与匹配的 开发头文件/库。
- 很多场景里,大家把“安装 GCC 及其开发工具”也称作“装 GCC 插件”。下面先给出安装/升级 GCC 的可靠做法,再补充“真正插件”的示例思路。
二、安装或升级 GCC(先确保编译器可用)
- CentOS 7 默认仓库的 GCC 版本为 4.8.5。若仅需基础使用,可直接安装:
- 命令:
sudo yum -y install gcc gcc-c++ kernel-devel
- 验证:
gcc --version、g++ --version
- 若需要更高版本(如 7/8/9/10/11 等),推荐使用 SCL(Software Collections) 的 devtoolset,它不会覆盖系统默认 GCC,可多版本并存:
- 安装 SCL 源:
sudo yum install -y centos-release-scl
- 安装所需版本(示例为 devtoolset-8):
sudo yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++
- 启用版本(临时生效):
scl enable devtoolset-8 bash 或 source /opt/rh/devtoolset-8/enable
- 验证:
gcc -v(应显示 8.x)
- 长期使用可写入
~/.bashrc:echo "source /opt/rh/devtoolset-8/enable" >> ~/.bashrc
- 可用版本示例:devtoolset-6(6)、devtoolset-7(7)、devtoolset-8(8) 等,按需选择。
三、离线安装 GCC(无外网环境)
- 挂载 CentOS 安装镜像,进入
Packages/ 目录,准备以下核心 RPM(示例为 x86_64):
- 依赖与基础:mpfr-.rpm、libmpc-.rpm、kernel-headers-.rpm、glibc-headers-.rpm、glibc-devel-.rpm、cpp-.rpm
- 编译器:gcc-.rpm、gcc-c+±.rpm
- 安装顺序(示例):
rpm -ivh mpfr-*.rpm
rpm -ivh libmpc-*.rpm
rpm -ivh kernel-headers-*.rpm
rpm -ivh glibc-headers-*.rpm
rpm -ivh glibc-devel-*.rpm
rpm -ivh cpp-*.rpm
rpm -ivh gcc-*.rpm
rpm -ivh gcc-c++-*.rpm
- 批量安装(不推荐忽略依赖):
rpm -Uvh *.rpm --nodeps --force
- 验证:
gcc -v、g++ --version
- 提示:务必保证 架构(如 x86_64) 与 系统版本一致,且依赖完整。
四、安装真正的 GCC 插件或基于 GCC 的工具
- 常见插件/工具与安装要点(示例命令,按需选择):
- Clang/LLVM(含 clangd、clang-tidy 等,可作为 GCC 的替代/补充工具链)
- 安装:
sudo yum -y install clang clang-tools-extra
- 验证:
clang --version、clang-tidy --version
- GCC MELT(GCC 的 DSL 插件框架,适合高级用户)
- 获取与构建:从 GCC MELT 官网/仓库获取源码,按官方说明
./configure && make && sudo make install
- 使用:遵循 MELT 的模块加载与运行方式(需匹配 GCC 版本)
- 静态分析/插桩工具(如 GCC 插件开发包、基于 Clang 的分析器)
- 思路:安装对应开发包(如
clang-devel、llvm-devel),按工具文档编写/编译插件,并通过编译器/构建系统加载
- 注意:第三方插件需与已安装的 GCC 主次版本匹配;若使用 devtoolset,插件通常安装在 /opt/rh/devtoolset-x/ 下,启用该环境后再编译/运行插件。
五、常见问题与排查
- 编译时报错如“GLIBCXX_3.4.20 not found”,多为 libstdc++ 版本偏低(常见于老系统使用高版本编译器或工具链):
- 检查:
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
- 处理思路:升级 GCC(如启用 devtoolset-8/9/10),或按依赖顺序编译/安装新版 GMP/MPFR/MPC 后重装 GCC,确保生成更新的 libstdc++;谨慎使用软链接替换系统库,避免系统不稳定。