如何针对i686架构编译现有SRPM包?libgcc编译报错求助
解决i686架构libgcc构建时的ELF类错误
问题原因
错误提示的wrong ELF class: ELFCLASS32,是因为你在x86_64主机系统上构建32位gcc时,64位的/usr/bin/ld尝试加载32位的liblto_plugin.so插件,两者架构不匹配导致加载失败。
解决方法
1. 安装32位编译依赖
先为x86_64系统补上32位工具链支持(以RHEL/CentOS系为例):
yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 binutils-devel.i686
2. 调整rpmbuild构建参数
不需要用setarch i686,可通过以下两种方式处理:
- 临时禁用LTO插件:
在rpmbuild命令中添加宏定义,跳过LTO插件加载:rpmbuild --target i686 -ba /rpmbuild/SPECS/gcc.spec --without lto - 修改gcc.spec文件:
打开/rpmbuild/SPECS/gcc.spec,添加架构判断,构建i686时禁用LTO相关配置:%ifarch i686 %global _lto_cflags %{nil} %endif
3. 使用mock工具构建(更稳定)
mock是RPM专用构建工具,能自动处理跨架构依赖和隔离环境:
- 安装mock:
yum install mock - 初始化i686构建环境(替换为对应发行版配置):
mock -r fedora-39-i386 --init - 导入SRPM并构建:
mock -r fedora-39-i386 --rebuild /path/to/your/gcc.src.rpm
验证结果
构建完成后,在/rpmbuild/RPMS/i686/目录找到目标包,用file命令验证架构:
file /rpmbuild/RPMS/i686/libgcc-*.so
输出应显示ELF 32-bit LSB shared object, Intel 80386。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

