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

如何配置GNU binutils支持x86_64裸机ELF及PE/COFF格式

配置支持x86_64裸机ELF与PE/COFF的GNU Binutils

我正尝试为x86_64裸机ELF目标配置GNU binutils,同时添加PE/COFF二进制格式支持,用于操作系统和EFI的教学开发。我知道有--enable-targets=all选项,但不想编译binutils所有支持的目标格式,仅需添加少量额外目标格式。

我尝试过多种方式通过--enable-targets列表配置BFD,但均未完全成功。例如尝试了以下配置:

--enable-targets=x86_64-none-elf64,i386-none-elf32,i386-none-pe,i386-none-pei,x86_64-none-pe,pei-none-x86_64,x86_64-none-coff,i386-none-coff

但遗憾的是,部分目标总是出现“支持已移除”的错误,而使用--enable-targets=all编译时,程序帮助文本显示这些目标仍受支持,因此我认为是自身配置有误。

以下是shell脚本中使用的完整配置命令行:

../binutils-2.45/configure --prefix=$INSTALL \
                                         --with-gmp=$INSTALL \
                                         --with-mpfr=$INSTALL \
                                         --with-mpc=$INSTALL \
                                         --with-isl=$INSTALL \
                                         --with-sysroot=$INSTALL/$ARCH \
                                         --disable-gdb \
                                         --enable-plugins \
                                         --enable-lto \
                                         --disable-nls \
                                         --disable-sim \
                                         --target=$ARCH \
                                         --enable-year2038 \
                                         --enable-multilib \
                                         --enable-multiarch \
                                         --enable-obsolete \
                                         --enable-targets=x86_64-none-elf64,i386-none-elf32,i386-none-pe,i386-none-pei,x86_64-none-pe,pei-none-x86_64,x86_64-none-coff,i386-none-coff \
                                         CFLAGS="-O2 -march=core2 -msse4.1 -mxsave" \
                                         CXXFLAGS="-O2 -march=core2 -msse4.1 -mxsave"

问题原因与解决方法

1. 目标三元组格式错误

Binutils的目标三元组需要遵循标准格式:arch-vendor-os(或arch-vendor-format),你列出的部分目标不符合规范,导致配置时被判定为已移除。

2. 正确的目标列表配置

针对你的需求(x86_64裸机ELF + PE/COFF/EFI支持),应该使用以下--enable-targets参数:

--enable-targets=i386-none-elf,i386-pe,x86_64-none-elf,x86_64-pe,pei-i386,pei-x86_64,i386-coff,x86_64-coff
  • i386-none-elf/x86_64-none-elf:对应32/64位裸机ELF目标,替代你之前的i386-none-elf32/x86_64-none-elf64(这类带位数后缀的格式已被废弃)
  • i386-pe/x86_64-pe:32/64位PE格式支持
  • pei-i386/pei-x86_64:PEI(EFI可执行镜像)格式支持
  • i386-coff/x86_64-coff:32/64位COFF格式支持

3. 额外注意事项

  • 确保--target=$ARCH中的$ARCH设置为x86_64-none-elf,这是你的主目标
  • --enable-obsolete参数可以保留,它会启用一些被标记为过时但仍可用的目标格式
  • 编译前建议清理之前的构建目录,避免旧配置残留:make distclean

内容的提问来源于stack exchange,提问作者Johannes Krottmayer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 06:34:55