Hasty Briefsbeta

双语

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方案以实现跨平台支持。