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

使用ld链接汇编程序时,指定-dynamic-linker仍生成静态链接文件

问题解决:ld链接x86-64汇编程序体积过大(8KB vs 1KB)

核心原因

你的汇编代码直接通过syscall调用系统接口,完全不依赖任何动态库(比如libc),所以无论是否添加-dynamic-linker选项,生成的都是静态可执行文件——动态链接的前提是程序引用了动态库中的符号,而你这里没有这类引用,ld不会生成动态链接的文件。

体积偏大是因为ld默认的链接配置包含了额外的段、页面对齐要求,以及未剥离的符号表等冗余内容,而教程中使用了精简的链接配置。

解决方法

通过ld的精简选项或自定义链接脚本,去除冗余内容:

方法1:使用ld内置精简选项

执行以下链接命令:

ld -o hello64 hello64.o --strip-all --nmagic
  • --strip-all:剥离所有符号表和调试信息,大幅减小体积
  • --nmagic:关闭页面对齐,避免因对齐产生的空字节填充

方法2:使用自定义极简链接脚本

创建一个名为link.ld的链接脚本,内容如下:

SECTIONS {
  . = 0x400000;  # x86-64程序默认的起始地址
  .text : { *(.text) }
  .data : { *(.data) }
  .bss : { *(.bss) }
}

然后用该脚本链接:

ld -o hello64 hello64.o -T link.ld --strip-all

验证结果

执行后再查看文件:

$ file hello64
hello64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
$ wc -c hello64
1200 hello64  # 体积接近教程中的1KB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:23:13