Shrinking While Linking
6 months ago
- #rust
- #static-libraries
- #optimization
- 作者探讨了为Go开发者分发大型Rust静态库的挑战,指出静态库(132MB)与动态库(15MB)之间的显著体积差异。
- 解释编译过程时强调,静态库包含冗余代码和元数据——这些内容在最终二进制文件中通常会被优化掉,但会给分发带来问题。
- 描述了一种通过解包、使用`ld --relocatable --gc-sections`重新链接再打包的方法,将静态库体积从132MB缩减至107MB。
- 进一步优化包括移除LLVM比特码(.llvmbc)、剥离调试信息及合并区段,最终实现19MB的体积(缩减85%)。
- 针对MacOS兼容性问题,提出使用LLVM工具处理中间比特码来实现类似体积缩减的替代方案。
- 提及去重工具'dragonfire'可能无法与所述合并方法良好配合,该工具用于消除静态库中重复的目标文件。
- 最后权衡经典二进制工具(更快、兼容性更广)与LLVM工具(支持MacOS)的优劣,为Nickel库选择LLVM方案以实现跨平台支持。