Skip to content

麒麟 V10 (Lance) x86_64 GCC‑9.4.0 编译部署完整总结 ​

目标:系统自带 libstdc++ 最高只有GLIBCXX_3.4.24,需要拿到GLIBCXX_3.4.25;不替换系统库,独立部署 gcc‑9.4.0,产出 GLIBCXX_3.4.28 向下兼容全部低版本符号 操作系统:Kylin Linux Advanced Server V10 (Lance) 4.19.90‑52.33.v2207.ky10.x86_64

核心原则 ​

  1. ❌严禁覆盖 / 替换系统/usr/lib64/libstdc++.so.6,否则 ssh、yum、ls 会直接崩溃。
  2. ✅GCC9.4 安装到独立目录/usr/local/gcc94,业务程序通过LD_LIBRARY_PATH加载新库。
  3. ✅--without‑isl关闭 isl 循环优化,规避 isl 下载、版本兼容问题,不影响 libstdc++ 产物。

完整操作步骤 ​

1. 准备源码与依赖包 ​

1)上传 gcc‑9.4.0.tar.xz 解压到 /usr/local/src/

cd /usr/local/src
tar -Jxf gcc-9.4.0.tar.xz
cd gcc-9.4.0

2)外网下载 3 个依赖包,上传到 gcc‑9.4.0 源码根目录,不解压

  • gmp‑6.2.1.tar.bz2
  • mpfr‑4.1.0.tar.bz2
  • mpc‑1.2.1.tar.gz

3)手动解压并创建软链接(不执行 download_prerequisites 脚本,避免 ftp 网络卡死)

tar -jxf gmp-6.2.1.tar.bz2
tar -jxf mpfr-4.1.0.tar.bz2
tar -zxf mpc-1.2.1.tar.gz

ln -sf gmp-6.2.1 gmp
ln -sf mpfr-4.1.0 mpfr
ln -sf mpc-1.2.1 mpc

2. configure 配置 ​

mkdir build && cd build
rm -rf *

../configure \
  --prefix=/usr/local/gcc94 \
  --enable-languages=c,c++ \
  --disable-multilib \
  --without-isl

生产实践:大量离线编译 gcc‑9.x 场景,都会加--without‑isl,规避 isl 下载、版本兼容问题,产出的 C++ 标准库不受任何影响。 出现config.status: creating Makefile代表配置成功;语言、文档相关警告直接忽略。

3. 编译 & 安装 ​

⚠️麒麟 V10 编译 gcc 非常耗内存,不要用‑j$(nproc),使用‑j2,内存不足改为‑j1;建议使用 screen 防止 SSH 超时断开。 ⚠️编译时间很长,8 核机器大约 2‑4 小时,不要中断会话;如果是 ssh 远程登录,建议用 screen/tmux 防止断开导致编译终止。

make -j2
make install

4. 校验产物 ​

strings /usr/local/gcc94/lib64/libstdc++.so.6 | grep GLIBCXX

确认输出包含:GLIBCXX_3.4.25 ~ GLIBCXX_3.4.28。

5. 业务程序使用新 libstdc++ ​

方式 A:临时 shell 会话 ​

export LD_LIBRARY_PATH=/usr/local/gcc94/lib64:$LD_LIBRARY_PATH
./你的程序
ldd ./你的程序

方式 B:生产 systemd 服务(推荐) ​

service 文件[Service]段添加环境变量:

[Service]
Environment="LD_LIBRARY_PATH=/usr/local/gcc94/lib64:$LD_LIBRARY_PATH"
systemctl daemon-reload
systemctl restart 服务名

注意:shell 中 export 环境变量对 systemd 托管的服务无效,必须写进 unit 文件。

6. 离线迁移(其他同架构麒麟 V10 服务器复用) ​

tar -zcvf gcc94.tar.gz -C /usr/local gcc94

目标机器解压到/usr/local,直接使用,无需重新编译。

7. 可选清理源码释放磁盘 ​

rm -rf /usr/local/src/gcc-9.4.0

常见踩坑清单 ​

  1. ./contrib/download_prerequisites卡住:ftp 网络问题,放弃脚本,手动解压 + 软链接。
  2. OOM 编译被杀死:降低 make 并发‑j1,使用 screen 跑编译。
  3. 程序依然报GLIBCXX_3.4.25 not found:
    • systemd 服务没有配置 LD_LIBRARY_PATH;
    • ldd 确认程序加载的仍然是系统/usr/lib64/libstdc++.so.6。
  4. 不要做全局 ld.so.conf 配置,容易导致系统老工具异常。

版本对照 ​

  • GCC‑7:GLIBCXX_3.4.24(系统自带)
  • GCC‑8:GLIBCXX_3.4.25
  • GCC‑9.4.0:GLIBCXX_3.4.28,包含全部低版本符号,满足本次需求。

Released under the MIT License.