You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何针对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专用构建工具,能自动处理跨架构依赖和隔离环境:

  1. 安装mock:
    yum install mock
    
  2. 初始化i686构建环境(替换为对应发行版配置):
    mock -r fedora-39-i386 --init
    
  3. 导入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:27:12