Ubuntu/Debian 下用 sudo apt install build-essential 最快,它自动安装 gcc、g++、make、libc6-dev 等;仅装 gcc 会因缺头文件报错 stdio.h 不存在。

Ubuntu/Debian 系统直接用 apt 安装 GCC 最快
绝大多数现代 Linux 发行版不需要从源码编译 GCC,系统包管理器已提供稳定、兼容的版本。Ubuntu 或 Debian 下执行:
sudo apt update && sudo apt install build-essential
build-essential 是元包,会自动安装 gcc、g++、make、libc6-dev 等核心工具。装完验证:gcc --version如果输出类似
gcc (Ubuntu 12.04-0ubuntu1~22.04.1) 12.3.0,说明已就绪。
常见错误:只装 gcc 却漏掉 libc6-dev,导致编译时提示 fatal error: stdio.h: No such file or directory。这是因为头文件和链接库不在默认路径,build-essential 能一并解决。
CentOS/RHEL/Rocky Linux 用 dnf 或 yum 安装 GCC
RHEL 系 8+ 默认用 dnf,7 及更早用 yum。推荐命令:
sudo dnf groupinstall "Development Tools"该组包含
gcc、gcc-c++、make、autoconf、automake 等全套开发依赖。
注意点:
- 不要单独运行
sudo dnf install gcc—— 它不自动拉取glibc-devel,同样会报找不到stdio.h - 若提示
No group Development Tools available,先启用 CodeReady Builder 仓库(RHEL)或 PowerTools(CentOS Stream) -
dnf groupinfo "Development Tools"可查看实际包含哪些包
为什么一般不建议从源码编译 GCC
源码编译 gcc 是可行的,但耗时长(数小时)、依赖复杂(需先有能编译 C++ 的旧版 GCC、GMP/MPFR/MPC 库),且极易因配置参数出错导致生成的编译器无法正常工作。
典型失败场景:
- 忘记
--enable-languages=c,c++,结果编译出来只有 C 支持,g++命令不存在 - 未设置
--prefix=/opt/gcc-13.2,默认装到/usr/local,覆盖系统原有工具链,可能破坏系统软件包构建 - 编译中途因内存不足(
internal compiler error: Killed)被 OOM killer 终止,尤其在 2GB 以下内存的 VPS 上
验证 GCC 是否真正可用,别只看 --version
gcc --version 成功只代表二进制存在,不代表能编译代码。最简验证方式:
echo '#include如果输出\nint main(){printf("OK\\n");return 0;}' | gcc -x c - -o test && ./test
OK,说明预处理器、编译器、链接器、C 运行时全部连通。
容易被忽略的细节:
- 某些最小化安装的系统(如 Docker Alpine、CoreOS)默认用
musl,不带glibc,apt install build-essential无效,得换发行版或用apk add build-base - WSL1 用户若遇到
cc1: error: unrecognized command line option '-mno-avx512f',是 WSL1 内核不支持新指令集,降级 GCC 版本或升级到 WSL2 - 非 root 用户想局部安装 GCC?可用
linuxbrew(brew install gcc),它会把完整工具链放在~/.linuxbrew下,不污染系统










