小编典典

为什么 Rust 可执行文件如此庞大?

all

刚刚找到 Rust 并阅读了文档的前两章,我发现他们定义语言的方法和方式特别有趣。所以我决定弄湿我的手指并从Hello world开始......

我在 Windows 7 x64 上这样做了,顺便说一句。

fn main() {
    println!("Hello, world!");
}

发布cargo build并查看结果,targets\debug我发现结果.exe
3MB。经过一番搜索(货物命令行标志的文档很难找到......)我找到--release了选项并创建了发布版本。令我惊讶的是,.exe
的大小只变小了一点点:2.99MB 而不是 3MB。

所以,承认我是 Rust 及其生态系统的新手,我的期望是系统编程语言会产生一些紧凑的东西。

谁能详细说明 Rust 正在编译什么,它怎么可能从 3
班轮程序中生成如此巨大的图像?是编译成虚拟机吗?是否有我错过的条命令(发布版本中的调试信息?)?还有什么可以让我们了解正在发生的事情吗?


阅读 213

收藏
2022-05-19

共1个答案

小编典典

Rust 使用静态链接来编译其程序,这意味着即使是最简单的Hello world!程序所需的所有库都将被编译到您的可执行文件中。这也包括 Rust
运行时。

要强制 Rust 动态链接程序,请使用命令行参数-C prefer-dynamic;这将导致文件大小更小 ,但 也需要 Rust
库(包括其运行时)在运行时可供您的程序使用。这实质上意味着如果计算机没有它们,您将需要提供它们,占用的 空间 比原来的静态链接程序占用的空间多。

出于可移植性的考虑,我建议您以您曾经将程序分发给其他人的方式静态链接 Rust 库和运行时。

2022-05-19