CentOS7.4编译GCC12.1.0时libstdc++.so.6缺失GLIBCXX版本标识问题
GCC 12.1.0编译后libstdc++.so.6缺失GLIBCXX版本标识的问题解决
问题原因
GCC 10及后续版本默认启用了--enable-gnu-unique-object编译选项,该选项依赖GNU ld的unique object特性。但CentOS 7.4自带的ld版本为2.25,不支持该特性,导致编译生成的libstdc++.so.6无法正常生成GLIBCXX系列版本符号,仅保留GLIBCXX_FORCE_NEW等通用标识。而GCC 9.x及更早版本默认未开启该选项,因此不存在此问题。
解决方法
1. 调整编译配置参数
在配置GCC编译时,添加--disable-gnu-unique-object参数关闭不兼容的特性,示例配置命令如下:
# 进入编译目录(假设已解压gcc源码到gcc-12.1.0目录,新建build目录) cd build ../gcc-12.1.0/configure --prefix=/opt/gcc-12.1.0 \ --disable-multilib \ --disable-gnu-unique-object \ --with-default-libstdcxx-abi=gcc4-compatible \ --enable-languages=c,c++
--prefix:指定GCC安装路径,根据实际需求修改;--disable-multilib:关闭多架构支持,适合HPC单架构环境;--disable-gnu-unique-object:核心修复参数,禁用导致版本符号丢失的特性;--enable-languages:指定编译支持的语言,按需添加。
2. 安装编译依赖
确保CentOS 7.4环境具备完整编译依赖:
yum install -y gcc gcc-c++ make wget bzip2 flex bison gmp-devel mpfr-devel libmpc-devel
3. 重新编译安装
使用多线程加速编译,完成后安装:
make -j$(nproc) make install
4. 验证修复效果
安装完成后,检查libstdc++.so.6的版本符号:
strings /opt/gcc-12.1.0/lib64/libstdc++.so.6 | grep GLIBCXX_
此时应能看到完整的GLIBCXX_3.4.xx系列版本标识,说明问题已修复。
内容的提问来源于stack exchange,提问作者Cloudac7
相关产品推荐
相关产品推荐

