我是一个完整的新手。自然,我收集并启动了hello_world。然后我查看了可执行模块的大小:
$ ls -l
итого 664
drwxrwxr-x 2 lary lary 4096 мар 1 2017 build
drwxrwxr-x 2 lary lary 4096 мар 1 2017 deps
drwxrwxr-x 2 lary lary 4096 мар 1 2017 examples
-rwxrwxr-x 1 lary lary 657056 мар 1 2017 hello_world
drwxrwxr-x 2 lary lary 4096 мар 1 2017 native
数字 657056 不知何故让我心烦意乱。我决定,因为这是一个调试版本,他们只是在那里塞满了各种调试信息,所以他是个大人物。决定收集释放。看了看:
$ ls -l
итого 5152
drwxrwxr-x 2 lary lary 4096 май 22 17:57 build
drwxrwxr-x 2 lary lary 4096 май 22 17:57 deps
drwxrwxr-x 2 lary lary 4096 май 22 17:57 examples
-rwxrwxr-x 2 lary lary 5236496 май 22 17:57 hello_world
-rw-rw-r-- 1 lary lary 102 май 22 17:57 hello_world.d
drwxrwxr-x 2 lary lary 4096 май 22 17:57 incremental
drwxrwxr-x 2 lary lary 4096 май 22 17:57 native
我变得非常难过。难道我做错了什么?还是正常?显然,已经组装了一个模块,整个运行时都静态链接到该模块中。应该是这样吗?
En SO:为什么 Rust 可执行文件如此庞大?
简而言之,rust 静态链接它的所有
libstd. 为了避免他这样做,你可以-C prefer-dynamic在争论中喂他:更新*
值得牢记的是,Rust 还没有稳定的 ABI ,而且 soname 和动态链接符号都会随着版本的变化而变化。唯一实际支持的动态 crate 类型是cdylib,但它用于创建具有 C 兼容外部接口的插件,而不是本地动态库。
* 感谢@mzabaluev的评论