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

BitTickler:

刚找到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线性程序生成如此大的图像?它可以编译到虚拟机吗?我是否错过了一个剥离命令(在发行版内部调试信息?)?还有什么可能让您了解正在发生的事情吗?

密码:

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

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

为了可移植性,如果您要将程序分发给其他人,我建议您以您一直使用的方式静态链接Rust库和运行时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

`file`,为什么可执行文件没有报告为可执行文件?

为什么ld需要我的可执行文件依赖的库?

Wine上可执行文件的运行速度比Windows快-为什么呢?

为什么Mongodb Enterprise 4.4.0中缺少mongostat可执行文件?

为什么Rust编译器会生成巨大的可执行文件?

为什么我找不到SonarQubeRunner 5.3的SonarQubeRunner可执行文件?

为什么汇编的可执行文件大小相同

如何从Rust可执行文件导出符号?

Windows为什么不保持随机化可执行文件的基址?

找不到GraphViz的可执行文件-通过pip安装graphViz之后为什么没有安装可执行文件?

为什么ELF可执行文件可以有4个LOAD段?

与较新的libstdc ++。so链接时,为什么C ++可执行文件的运行速度如此之快?

为什么我的64位可执行文件比32位可执行文件大3倍?

为什么在Linux中有多个可执行文件文件夹?

为什么不使.txt文件可执行文件而不是.sh文件可执行文件来运行脚本?

为什么某些共享库是可执行文件,为什么以及如何运行?

为什么删除后该可执行文件仍然执行?

为什么需要将某些文件设置为可执行文件?

为什么当我尝试运行可执行文件时,该可执行文件会说它不存在?

为什么以“标签顺序”样式显示的值“-”(连字符)会阻止“可执行文件”标签的匹配,即使已明确指定该标签也是如此?

为什么以“标签顺序”样式显示的值“-”(连字符)会阻止“可执行文件”标签的匹配,即使已明确指定该标签也是如此?

为什么我们不能删除正在运行的可执行文件

为什么运行“错误”的可执行文件?

为什么以“标签顺序”样式显示的值“-”(连字符)会阻止“可执行文件”标签的匹配,即使已明确指定该标签也是如此?

为什么每个sudo执行的可执行文件都需要sudo?

为什么source(或dot命令)不需要文件可执行文件

从LLVM位代码生成Rust可执行文件

rust可执行文件找不到bcdedit

为什么我需要不直接从我的可执行文件调用的 dll 的导入库?