在 Linux 系统中安装 GCC:完整指南
GCC(GNU Compiler Collection,GNU 编译器集合)是 Linux 生态中最核心的开发工具之一,支持 C、C++、Java、Fortran 等多种编程语言,广泛用于开源项目编译、应用开发和系统级编程。尽管许多 Linux 发行版预装了 GCC,但可能版本较旧,或因最小化安装未包含。本文将详细介绍 在 Linux 系统中安装 GCC 的多种方法,包括通过包管理器、源码编译、工具链(如 devtoolset)等,并覆盖常见问题、最佳实践和验证步骤,帮助开发者快速搭建编译环境。
目录#
1. 什么是 GCC?#
GCC 由 GNU 项目开发,是一套开源编译器集合,最初仅支持 C 语言,现可编译 C、C++、Objective-C、Fortran、Ada、Go 等多种语言。它不仅是 Linux 系统的默认编译器(如内核编译),也是许多跨平台项目的首选工具(如 Android NDK、嵌入式开发)。
- 核心组件:
gcc(C 编译器)、g++(C++ 编译器)、gcj(Java 编译器)等。 - 版本迭代:目前最新稳定版为 GCC 13(2023 年发布),各版本带来性能优化、新语言特性支持(如 C++20/23)和 bug 修复。
2. 安装前检查#
在安装前,建议先检查系统是否已预装 GCC 及当前版本:
# 检查 GCC 是否安装
gcc --version
# 若未安装,可能提示 "command not found"
# 检查 C++ 编译器(若需)
g++ --version若已安装但版本不符合需求(如需要 GCC 11+ 但系统默认是 GCC 8),可参考后续方法升级或并行安装。
此外,建议更新系统包索引(确保安装最新版本):
# Debian/Ubuntu
sudo apt update
# RHEL/CentOS
sudo yum check-update # 或 sudo dnf check-update
# Fedora
sudo dnf check-update
# Arch Linux
sudo pacman -Sy3. 安装方法#
3.1 通过包管理器安装(推荐)#
适用场景:大多数用户,追求简单、稳定,无需特定版本。
Linux 发行版的官方仓库通常提供经过测试的 GCC 版本,通过包管理器安装可自动处理依赖、配置环境,且易于更新。
3.1.1 Debian/Ubuntu 及衍生版(如 Mint、Pop!_OS)#
Debian/Ubuntu 使用 apt 包管理器。推荐安装 build-essential 元包(包含 GCC、G++、make、libc6-dev 等开发工具):
# 安装基础开发工具(含 GCC)
sudo apt install build-essential
# 单独安装 GCC(若仅需 C 编译器)
sudo apt install gcc
# 单独安装 G++(C++ 编译器)
sudo apt install g++验证安装:
gcc --version # 输出类似:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
g++ --version3.1.2 RHEL/CentOS 7/8 及衍生版(如 AlmaLinux、Rocky Linux)#
RHEL/CentOS 使用 yum(CentOS 7)或 dnf(CentOS 8+)。推荐安装「开发工具」组(包含 GCC 及相关依赖):
# CentOS 7
sudo yum groupinstall "Development Tools" # 安装开发工具组
# 或单独安装 GCC
sudo yum install gcc gcc-c++ # gcc-c++ 为 C++ 编译器
# CentOS 8/RHEL 8+
sudo dnf groupinstall "Development Tools"
# 或单独安装
sudo dnf install gcc gcc-c++验证:
gcc --version # 输出类似:gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-18)3.1.3 Fedora#
Fedora 使用 dnf,与 RHEL/CentOS 8 操作类似,但仓库版本更新更快:
# 安装开发工具组
sudo dnf groupinstall "Development Tools"
# 单独安装 GCC
sudo dnf install gcc gcc-c++3.1.4 Arch Linux 及衍生版(如 Manjaro)#
Arch 仓库的 GCC 版本通常较新,使用 pacman 安装:
# 安装 GCC
sudo pacman -S gcc
# 安装开发工具(含 make、cmake 等)
sudo pacman -S base-devel3.2 从源码编译安装(自定义版本)#
适用场景:需要特定 GCC 版本(如最新版、旧版本),或需自定义编译选项(如启用特定语言、优化架构)。
注意:源码编译步骤较复杂,需手动处理依赖,且可能与系统默认 GCC 冲突(建议安装到独立目录)。
步骤 1:下载 GCC 源码#
从 GCC 官方镜像 下载所需版本(以 GCC 13.2.0 为例):
# 创建工作目录
mkdir -p ~/gcc-src && cd ~/gcc-src
# 下载源码(通过镜像站点,如中国科技大学镜像)
wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.xz
# 解压
tar -xf gcc-13.2.0.tar.xz && cd gcc-13.2.0步骤 2:安装依赖库#
GCC 编译依赖以下库(需提前安装,否则配置时会报错):
- GMP(GNU 多精度算术库)
- MPFR(多精度浮点运算库)
- MPC(多精度复数运算库)
- ISL(整数集库,可选,用于优化)
可通过包管理器安装系统版,或使用 GCC 源码自带的脚本自动下载:
# 方法 1:通过包管理器安装(推荐,更快)
# Debian/Ubuntu
sudo apt install libgmp-dev libmpfr-dev libmpc-dev libisl-dev
# RHEL/CentOS
sudo yum install gmp-devel mpfr-devel libmpc-devel isl-devel
# 方法 2:使用 GCC 脚本自动下载依赖(若系统库版本不足)
./contrib/download_prerequisites步骤 3:配置编译选项#
创建构建目录(避免污染源码),并运行 configure 脚本指定安装路径、支持语言等:
# 创建构建目录
mkdir build && cd build
# 配置(关键参数说明):
# --prefix:安装路径(避免覆盖系统 GCC,建议 /usr/local/gcc-13.2.0)
# --enable-languages:支持的语言(c,c++ 为常用选项)
# --disable-multilib:禁用多架构支持(64 位系统可选)
# --with-system-zlib:使用系统 zlib 库
../configure \
--prefix=/usr/local/gcc-13.2.0 \
--enable-languages=c,c++ \
--disable-multilib \
--with-system-zlib注意:configure 过程会检查依赖,若提示缺失库,需返回步骤 2 安装。
步骤 4:编译与安装#
编译耗时较长(取决于 CPU 核心数,建议使用 -j 选项并行编译):
# 编译(-j$(nproc) 表示使用所有 CPU 核心,加速编译)
make -j$(nproc) # 可能需要 30 分钟 ~ 2 小时,取决于硬件
# 安装(需 root 权限)
sudo make install步骤 5:配置环境变量#
将新安装的 GCC 添加到系统 PATH,或通过 update-alternatives 管理多版本:
# 临时生效(当前终端)
export PATH=/usr/local/gcc-13.2.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/gcc-13.2.0/lib64:$LD_LIBRARY_PATH
# 永久生效(添加到 ~/.bashrc 或 ~/.zshrc)
echo 'export PATH=/usr/local/gcc-13.2.0/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/gcc-13.2.0/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc # 立即生效验证:
gcc --version # 输出:gcc (GCC) 13.2.03.3 使用工具链(如 devtoolset)安装#
适用场景:RHEL/CentOS 系统需安装新版本 GCC(系统仓库版本过旧,如 CentOS 7 默认 GCC 4.8)。
原理:通过 Software Collections (SCL) 提供的 devtoolset 包,可在不替换系统 GCC 的情况下安装多版本 GCC。
以 CentOS 7 安装 GCC 11 为例:#
- 安装 SCL 仓库:
sudo yum install centos-release-scl- 安装 devtoolset-11(包含 GCC 11):
sudo yum install devtoolset-11-gcc devtoolset-11-gcc-c++- 临时启用 GCC 11(当前终端生效):
scl enable devtoolset-11 bash- 永久启用(添加到
~/.bashrc):
echo 'source scl_source enable devtoolset-11' >> ~/.bashrc
source ~/.bashrc验证:
gcc --version # 输出:gcc (GCC) 11.2.1 20220127 (Red Hat 11.2.1-9)4. 安装后验证#
无论通过哪种方法安装,需验证 GCC 是否正常工作。编译一个简单的 C 程序测试:
- 创建测试文件
hello.c:
#include <stdio.h>
int main() {
printf("Hello, GCC! Version: %d.%d.%d\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
return 0;
}- 编译并运行:
gcc hello.c -o hello # 编译
./hello # 运行若输出类似 Hello, GCC! Version: 13.2.0,则安装成功。
5. 常见问题与解决方案#
问题 1:gcc: command not found(命令未找到)#
- 原因:GCC 未安装,或安装路径未添加到
PATH。 - 解决:
- 包管理器安装:确认
sudo apt install gcc等命令是否执行成功。 - 源码安装:检查
PATH是否包含安装路径(如/usr/local/gcc-13.2.0/bin)。
- 包管理器安装:确认
问题 2:源码编译时 configure: error: could not find GMP version >= 4.3.2#
- 原因:缺少 GMP 库或版本过低。
- 解决:通过包管理器安装
libgmp-dev(或gmp-devel),或运行./contrib/download_prerequisites自动下载。
问题 3:编译程序时提示「undefined reference to std::cout」#
- 原因:使用
gcc编译 C++ 代码(需用g++链接 C++ 标准库)。 - 解决:用
g++替代gcc编译 C++ 程序:g++ hello.cpp -o hello。
问题 4:多版本 GCC 冲突#
- 原因:系统存在多个 GCC 版本,默认版本非预期。
- 解决:使用
update-alternatives管理版本:# 添加版本到 alternatives(以 GCC 13 和系统默认 GCC 为例) sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/gcc-13.2.0/bin/gcc 100 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50 # 系统默认版本 # 选择默认版本 sudo update-alternatives --config gcc
6. 最佳实践#
- 优先使用包管理器:除非需要特定版本,否则通过
apt/yum等安装,避免手动维护依赖。 - 安装开发工具组:如
build-essential或「Development Tools」,一次性获取编译所需的 make、libc 等工具。 - 源码安装路径隔离:安装到
/usr/local/gcc-x.y.z而非/usr,避免覆盖系统 GCC(可能导致系统工具故障)。 - 多版本管理:使用
update-alternatives(系统级)或scl(临时)切换版本,避免冲突。 - 定期更新:通过包管理器更新 GCC(
sudo apt upgrade gcc),获取安全补丁和性能优化。
7. 总结#
本文介绍了在 Linux 系统中安装 GCC 的三种方法:包管理器(推荐)、源码编译(自定义版本) 和 工具链(如 devtoolset,适用于旧系统升级)。根据需求选择合适的方法:
- 日常开发:优先用包管理器安装
build-essential或「Development Tools」。 - 特定版本需求:通过源码编译或工具链安装。
- 验证安装:始终编译测试程序确保 GCC 正常工作。
GCC 是 Linux 开发的基础工具,掌握其安装与配置对后续编译项目至关重要。