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

高版本GNU LD无法将ELF作为链接输入的32位操作系统构建问题

报错根因

GNU LD 自2.36版本开始新增输入文件类型强校验,默认禁止将已经完成链接的可执行ELF文件作为输入参与链接。你当前的构建流程中需要将已链接完成的build/bootloader/loader.elf和loader.o做二次链接,触发了高版本LD的校验规则,所以抛出报错。

解决方案

方案1:调整链接流程,取消二次链接(推荐,全版本兼容)

你当前的二次链接逻辑可以合并为一次链接,完全规避校验问题,修改Makefile如下:

  1. 删除原有build/bootloader/loader.elf的生成规则
  2. 修改loader_full.elf的生成规则,直接关联所有依赖的目标文件:
# 链接第一、第二阶段引导所有目标文件,直接生成loader_full.elf
build/bootloader/loader_full.elf: build/bootloader/loader.o build/bootloader/loader_2.o build/drivers/*.o
    ${LD} -T ld/loader.ld $^ -o $@
    rm build/bootloader/loader_2.o

该方案符合常规链接逻辑,不会产生额外兼容性问题。

方案2:添加LD参数绕过校验(临时兼容用)

如果不想改动现有构建流程,可直接给高版本LD添加--allow-link-executable参数,强制允许可执行文件作为链接输入:

build/bootloader/loader_full.elf: build/bootloader/loader.o build/bootloader/loader.elf
    ${LD} --allow-link-executable -T ld/loader.ld $^ -o $@

该参数仅绕过校验规则,不会改变原有链接生成的文件内容。

验证方式

修改完成后执行make clean && make重新构建即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:42:01