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

如何让GCC链接器不生成PHDR,输出Flat File?

生成无PHDR的Flat File解决方案

现代GCC配套的ld链接器默认强制ELF输出包含PHDR(程序头表),直接生成无PHDR的文件会触发报错。针对你的问题,以下是可行的解决方法:

方法一:链接脚本+objcopy转换(最可靠)

  1. 编写基础链接脚本(无需定义PHDRS),示例如下:
ENTRY(_start)

SECTIONS
{
    . = 0x0;  # 起始地址根据需求调整
    .text : { *(.text) }
    .data : { *(.data) }
    .bss : { *(.bss) }
}
  1. 编译链接时添加-Wl,--noinhibit-exec参数,忽略no sections assigned to phdrs错误,生成ELF文件:
gcc -T your_script.ld -Wl,--noinhibit-exec -o temp.elf your_source.c
  1. 使用objcopy将ELF转换为纯Flat File,自动剥离所有ELF头部、PHDR等额外信息:
objcopy -O binary temp.elf final.flat

方法二:直接通过链接脚本输出二进制

在链接脚本中指定输出格式为binary,ld会直接生成纯二进制文件,无需后续转换:

OUTPUT_FORMAT("binary")
ENTRY(_start)

SECTIONS
{
    . = 0x0;
    .text : { *(.text) }
    .data : { *(.data) }
    .bss : { *(.bss) }
}

编译链接命令:

gcc -T your_script.ld -o final.flat your_source.c

注:部分ld版本对方法二存在兼容性问题,若遇到异常优先使用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:31:40