rust - 如何优化原生和 WASM 工具链的可执行二进制文件的大小?
问题描述
我是 Rust 的新手,到目前为止,我对它的设计感到惊讶。但是我遇到了一些让我害怕在商业项目中使用它的东西。“Hello world”应用程序的可执行二进制文件大小为 3.2Mb。
-rwxr-xr-x 2 kos kos 3,2M Jul 10 15:44 experiment_app_size
那是巨大的!
- 的版本
rustc
是1.53.0
- 工具链是
stable-x86_64-unknown-linux-gnu
. - 目标是
release
。
我想知道它是否计划在未来解决这个问题?有没有一种技术可以用来减小可执行二进制文件的大小?同样的问题与 WASM 工具链有关吗?
解决方案
默认情况下,Rust 优化执行速度而不是二进制大小,因为对于绝大多数应用程序来说这是理想的。但是对于开发人员想要优化二进制大小的情况,Rust 提供了实现这一点的机制。
- 以发布模式构建
- 从二进制中去除符号
- 优化尺寸
- 启用链接时间优化
- 减少并行代码生成单元以增加优化
- 恐慌中止
- 使用 panic_immediate_abort 删除恐慌字符串格式
- 使用 #![no_main] 和小心使用 libstd 删除 core::fmt
- 使用 #![no_std] 删除 libstd
- 压缩二进制
上面描述的大多数技术都适用于原生工具链和 WASM 工具链。按照该指南,可以获得大约 93k 的“hello world”二进制文件。
这是一篇关于如何优化 Rust WASM build 的二进制大小的专门文章。
这是官方 Rust 论坛上关于选项开发人员必须按大小优化二进制的利弊的深入讨论。
推荐阅读
- xslt - 如何在 XSLT 中忽略完整日期函数中的月份
- javascript - 来自json数据的Vue Js复选框模型
- java - 使用tomcat proxyhost时,如何在Java Web应用程序中的Web浏览器的URL中获得真正的主机
- python - Alexnet 精度差
- .net - 该进程无法访问文件 bin\debug,因为它正在被另一个进程使用
- javascript - 如何将选定的复选框列表值传递给另一个表单?
- python-3.x - 如何从函数中获得价值?
- ios - 如何使用 swift 从四舍五入到特定模式的自定义滑块中创造价值?
- react-native - 在 CLI 上启动 expo 失败
- excel - 如何简化长方程?