在 CentOS 上静态编译(构建)GCC,通常指的是:从源码编译出一个 GCC,其自身不依赖系统动态库(如 glibc、libstdc++ 等),或者编译出的程序默认静态链接。下面分两种常见需求说明。
⚠️ 注意:
完全静态的 GCC 很难且不建议(尤其依赖 glibc 时)。
实际中通常是:
- GCC 自身动态链接(正常)
- 用 GCC 编译出的程序可静态链接
如果你只是想 用 GCC 生成静态可执行文件,看第三节。
yum groupinstall "Development Tools"
yum install -y \
wget gcc gcc-c++ make \
gmp-devel mpfr-devel libmpc-devel \
glibc-static glibc-devel \
zlib-devel
cd /usr/src
wget https://ftp.gnu.org/gnu/gcc/gcc-11.4.0/gcc-11.4.0.tar.gz
tar xf gcc-11.4.0.tar.gz
cd gcc-11.4.0
./contrib/download_prerequisites
mkdir build && cd build
../configure \
--prefix=/opt/gcc-static \
--enable-languages=c,c++ \
--disable-multilib \
--enable-static \
--disable-shared
说明:
--enable-static:生成静态库--disable-shared:不生成动态库(⚠️ 会导致很多程序无法用此 GCC 编译)--disable-multilib:仅 64 位❗ 不建议
--disable-shared,否则无法正常使用 GCC
make -j$(nproc)
make install
如果你只是想 程序静态链接,不需要静态 GCC:
yum install glibc-static libstdc++-static
gcc -static main.c -o main
g++ -static main.cpp -o main
验证:
ldd main
# 输出:not a dynamic executable
如果你必须得到一个不依赖任何 .so 的 gcc:
../configure \
--prefix=/opt/gcc-full-static \
--enable-languages=c,c++ \
--disable-shared \
--enable-static \
--disable-multilib \
--disable-bootstrap
⚠️ 问题:
| 需求 | 推荐方式 |
|---|---|
| 编译静态程序 | gcc -static |
| 自带 GCC 环境 | 普通编译 GCC |
| 容器/离线 | 用静态程序 + 普通 GCC |
| 完全离线工具 | 用 musl + GCC |
如果你想要 真正完全静态(无 glibc):
yum install musl musl-gcc
musl-gcc main.c -o main
或编译 musl + gcc 工具链(如 musl-cross)
如果你能告诉我:
我可以给你精确命令。