CentOS 安装 GCC 及 G++ 完全指南:从基础到进阶

GCC(GNU Compiler Collection)是一套由 GNU 开发的编程语言编译器,支持 C、C++、Java、Go 等多种语言。其中,gcc 是 C 语言编译器,g++ 是 C++ 语言编译器,二者是 Linux 系统开发中不可或缺的工具。无论是编译开源软件、开发应用程序,还是进行系统级编程,GCC 都是核心依赖。

本文将详细介绍在 CentOS 系统中安装 GCC 和 G++ 的完整流程,包括基础安装、升级到新版本(如通过 Developer Toolset)、验证方法、示例使用及常见问题解决。无论你是 CentOS 7、8 还是 9 用户,都能找到适合的操作步骤。

目录#

  1. 前提条件
  2. 检查是否已安装 GCC/G++
  3. 安装方法
  4. 验证安装结果
  5. 示例:编译 C/C++ 程序
  6. 常见问题与 troubleshooting
  7. 最佳实践
  8. 总结
  9. 参考资料

1. 前提条件#

在开始安装前,请确保满足以下条件:

  • 系统版本:CentOS 7/8/9(本文以 CentOS 7 和 CentOS 8/9 为例,操作略有差异)。
  • 权限:拥有 sudo 权限(或 root 用户),用于执行安装命令。
  • 网络:服务器已连接互联网,能够访问 CentOS 官方仓库或第三方源。
  • 工具:确保 yum(CentOS 7)或 dnf(CentOS 8/9)包管理器可用。

2. 检查是否已安装 GCC/G++#

首先,检查系统是否已预装 GCC 或 G++。打开终端,执行以下命令:

# 检查 GCC 版本
gcc --version
 
# 检查 G++ 版本
g++ --version
  • 如果输出类似 gcc (GCC) x.x.x 的信息,说明已安装,可跳过安装步骤直接使用(或根据需求升级版本)。
  • 如果提示 command not found,则需要安装。

3. 安装方法#

3.1 通过系统默认仓库安装(稳定但版本较旧)#

CentOS 官方仓库中提供了 GCC/G++ 包,但版本通常较旧(例如 CentOS 7 默认 GCC 版本为 4.8.5,CentOS 8 为 8.5.0,CentOS 9 为 11.2.1)。适合对版本无特殊要求的场景。

3.1.1 CentOS 7(使用 yum#

  1. 更新系统包索引(推荐,确保获取最新的包信息):

    sudo yum update -y
  2. 安装 GCC 和 G++

    sudo yum install -y gcc g++

3.1.2 CentOS 8/9(使用 dnf#

CentOS 8 及以上版本默认使用 dnf 作为包管理器,命令类似:

  1. 更新系统包索引

    sudo dnf update -y
  2. 安装 GCC 和 G++

    sudo dnf install -y gcc g++

说明:默认仓库安装的 GCC/G++ 会直接替换系统原有的编译器(如果存在),适合对版本要求不高的场景。

3.2 通过 Developer Toolset 安装新版本(推荐)#

如果需要使用较新的 GCC 版本(如 GCC 11、12),推荐使用 Developer Toolset(DTS)。DTS 是 Red Hat 提供的软件开发工具集,包含更新版本的 GCC、GDB 等工具,且不会覆盖系统默认的旧版 GCC(避免破坏依赖旧版 GCC 的系统组件)。

3.2.1 启用 Software Collections(SCL)仓库#

DTS 包位于 Software Collections 仓库中,需先启用:

  • CentOS 7

    sudo yum install -y centos-release-scl
  • CentOS 8/9: CentOS 8/9 的 SCL 仓库已整合到 AppStream 中,无需额外安装,直接安装 DTS 即可。

3.2.2 安装指定版本的 DTS#

DTS 提供多个版本(如 devtoolset-7devtoolset-11 等,版本号对应 GCC 主版本)。例如,安装 GCC 11:

# CentOS 7:安装 devtoolset-11(包含 GCC 11)
sudo yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++
 
# CentOS 8/9:安装 devtoolset-11
sudo dnf install -y devtoolset-11-gcc devtoolset-11-gcc-c++

可选版本:通过 yum search devtoolsetdnf search devtoolset 查看可用的 DTS 版本(如 devtoolset-12 对应 GCC 12)。

3.2.3 启用 DTS(临时/永久)#

DTS 安装后不会自动生效,需手动启用:

  • 临时启用(当前终端会话有效):

    scl enable devtoolset-11 bash

    执行后,当前终端的 gccg++ 将切换为 DTS 版本。

  • 永久启用(对所有新终端生效): 将启用命令添加到用户的 shell 配置文件(如 ~/.bashrc~/.bash_profile):

    echo "source scl_source enable devtoolset-11" >> ~/.bashrc
    source ~/.bashrc  # 立即生效

注意:永久启用可能影响依赖系统默认 GCC 的工具(如 yum/dnf),建议仅在开发环境临时启用。

4. 验证安装结果#

安装完成后,再次执行版本检查命令,确认 GCC/G++ 已正确安装:

# 检查 GCC 版本
gcc --version
 
# 检查 G++ 版本
g++ --version
  • 若通过默认仓库安装,输出应为系统默认版本(如 CentOS 7 显示 4.8.5)。
  • 若通过 DTS 安装并启用,输出应为 DTS 版本(如 11.2.1)。

5. 示例:编译 C/C++ 程序#

通过简单的 "Hello World" 程序验证编译器功能。

5.1 编译 C 程序#

  1. 创建源文件 hello.c

    #include <stdio.h>
     
    int main() {
        printf("Hello, GCC (C)!\n");
        return 0;
    }
  2. gcc 编译:

    gcc hello.c -o hello_c
  3. 运行可执行文件:

    ./hello_c

    输出:Hello, GCC (C)!

5.2 编译 C++ 程序#

  1. 创建源文件 hello.cpp

    #include <iostream>
    using namespace std;
     
    int main() {
        cout << "Hello, G++ (C++)!" << endl;
        return 0;
    }
  2. g++ 编译:

    g++ hello.cpp -o hello_cpp
  3. 运行可执行文件:

    ./hello_cpp

    输出:Hello, G++ (C++)!

6. 常见问题与 troubleshooting#

问题 1:gcc: command not found#

  • 原因:未安装 GCC 或未启用 DTS。
  • 解决
    • 确认已执行安装命令(yum install gcc 或 DTS 安装)。
    • 若使用 DTS,检查是否已通过 scl enable 启用。

问题 2:依赖缺失(如 libmpfr.so.4: cannot open shared object file#

  • 原因:系统缺少 GCC 依赖的库文件。
  • 解决:安装缺失的依赖包:
    # CentOS 7
    sudo yum install -y mpfr-devel gmp-devel libmpc-devel
     
    # CentOS 8/9
    sudo dnf install -y mpfr-devel gmp-devel libmpc-devel

问题 3:DTS 安装失败(No package devtoolset-11 available#

  • 原因:未启用 SCL 仓库。
  • 解决:CentOS 7 需先安装 centos-release-scl,CentOS 8/9 需确保 AppStream 仓库已启用:
    # CentOS 8/9 检查 AppStream 仓库
    sudo dnf repolist | grep appstream

7. 最佳实践#

  1. 优先使用 DTS 安装新版本:避免直接升级系统默认 GCC,防止破坏依赖旧版的系统组件。
  2. 按需启用 DTS:仅在开发时临时启用 DTS,避免影响系统工具(如 yum/dnf)。
  3. 定期更新系统:安装前执行 yum updatednf update,确保依赖包版本兼容。
  4. 验证编译结果:通过简单程序测试编译器功能,确保安装正确。
  5. 多版本共存:如需同时使用多个 GCC 版本,可通过 DTS 切换(如 scl enable devtoolset-11 bashscl enable devtoolset-12 bash)。

8. 总结#

本文详细介绍了在 CentOS 系统中安装 GCC 和 G++ 的两种方法:通过系统默认仓库安装稳定版,或通过 Developer Toolset 安装新版本。前者适合对版本无要求的场景,后者则推荐用于需要较新编译器特性的开发环境。通过本文的步骤,你可以快速完成 GCC/G++ 的安装、验证及基础使用,并解决常见问题。

9. 参考资料#