1. 搭建GCC开发环境

搭建GCC开发环境 学习卡片

任务目标

从源码构建GCC编译器,配置可用于后续插件开发与调试的环境,并通过编译并运行一个C程序验证编译器基本功能正常。

环境与依赖

本案例在 Ubuntu 22.04 LTS(x86_64)上验证。构建GCC需要以下依赖包:

sudo apt update
sudo apt install -y build-essential flex bison libgmp-dev libmpfr-dev libmpc-dev texinfo

其中build-essential提供系统C编译器(用于引导),flex/bison用于生成词法/语法分析器,libgmp/libmpfr/libmpc是GCC运行所需的数学库,texinfo用于生成文档。

下载并解压源码

从GCC官方镜像站(如 https://ftp.gnu.org/gnu/gcc/)下载GCC 13.2.0源码包:

wget https://ftp.gnu.org/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

下载并解压GCC依赖的GMP、MPFR、MPC库源码(GCC官方脚本会自动完成):

./contrib/download_prerequisites

配置与编译

GCC要求在源码目录之外进行构建。创建构建目录并配置:

mkdir -p /opt/gcc-build && cd /opt/gcc-build
/opt/gcc-13.2.0/configure \
  --prefix=/opt/gcc-13.2.0-install \
  --enable-languages=c,c++ \
  --disable-multilib \
  --enable-checking=release

关键配置项说明:

  • --prefix:指定安装路径,后续所有工具将安装到此目录。
  • --enable-languages=c,c++:仅构建C和C++编译器,缩短构建时间。
  • --disable-multilib:禁用多架构库支持,避免额外依赖。
  • --enable-checking=release:关闭内部断言检查,提升编译速度。

开始编译(使用-j参数并行加速,nproc获取CPU核心数):

make -j$(nproc)

编译完成后安装:

sudo make install

配置环境变量

将GCC安装路径加入PATH和LD_LIBRARY_PATH,编辑~/.bashrc追加:

export PATH=/opt/gcc-13.2.0-install/bin:$PATH
export LD_LIBRARY_PATH=/opt/gcc-13.2.0-install/lib64:$LD_LIBRARY_PATH

使配置生效:

source ~/.bashrc

验证编译器基本功能

创建测试文件hello.c:

#include <stdio.h>

int main() {
    printf("GCC build success\n");
    return 0;
}

编译并运行:

gcc hello.c -o hello
./hello

预期输出:

GCC build success

确认编译器版本与安装路径:

which gcc
gcc --version

预期输出:

/opt/gcc-13.2.0-install/bin/gcc
gcc (GCC) 13.2.0

验证通过标准

  • gcc --version显示版本号为13.2.0,且路径指向/opt/gcc-13.2.0-install/bin/。
  • hello.c编译无警告无错误,运行输出GCC build success。
  • 若需开发GCC插件,确认/opt/gcc-13.2.0-install/lib/gcc/x86_64-pc-linux-gnu/13.2.0/plugin/include/目录存在(包含插件开发头文件)。

常见问题

  • configure报错缺少GMP/MPFR/MPC:确认已执行./contrib/download_prerequisites,或手动安装libgmp-dev libmpfr-dev libmpc-dev。
  • 编译内存不足:GCC构建约需2-4GB内存,可减少并行数(如make -j2)或增加交换空间。
  • 运行新GCC时提示找不到共享库:确认LD_LIBRARY_PATH已包含/opt/gcc-13.2.0-install/lib64,或使用sudo ldconfig更新缓存。