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

为何对Rust程序执行objcopy --strip-all后可执行文件体积会减半?

Rust可执行文件执行objcopy --strip-all后体积大幅缩减的原因
  • objcopy --strip-all的核心作用是移除可执行文件中所有非运行必需的内容,包括符号表、调试信息、行号映射、注释段等,这部分内容完全不会参与程序运行逻辑,仅用于调试、问题排查场景。
  • Rust 默认的release编译配置并未开启strip功能,哪怕是最高优化等级的release版本,默认也会保留全量符号信息:
    • 保留符号是为了程序panic时可以输出可读的调用栈,直接定位到具体的函数名、代码行号,方便开发和线上问题排查
    • Rust默认采用静态链接标准库的编译策略,整个Rust标准库的符号信息也会全部打包进最终可执行文件,这部分是体积占用的大头
  • 你测试的两个平台的表现完全符合预期:
    • Linux下ELF格式的可执行文件,移除符号和调试信息后,Hello World类的小型工程体积从3MB降到300KB左右是非常普遍的情况
    • Windows下x86_64-pc-windows-gnu工具链生成的PE格式可执行文件逻辑完全一致,默认携带的调试信息、符号表体积占比更高,所以会出现4MB降到1MB的表现

如果想要在编译时自动完成strip操作,不需要手动执行objcopy命令,可以在项目的Cargo.toml中添加如下配置:

[profile.release]
strip = true

剥离后的程序运行逻辑和剥离前完全一致,仅会丢失调试、带符号的panic回溯能力,如果是生产环境发布且不需要现场调试能力,非常推荐开启strip配置缩减体积。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:45:02