写了这么久的 Rust 代码了,可能很多人还对 Rust 的编译后的文件格式不是很清晰。本篇我们就来理一下,Rust 中的 bin, lib, rlib, a, so 是什么,如何生成,以及其它一些细节。
从 cargo new 说起
我们创建一个新工程,通常从下面两句入手:
cargo new foobar
或
cargo new --lib foobar
前者创建一个可执行工程,而后者创建一个库工程。
实际上,你去探索上述命令行生成的文件,发现它们的 Cargo.toml 完全一样,区别仅在于 src 目录下,可执行工程是一个 main.rs,而库工程是一个 lib.rs。
这是因为 main.rs 和 lib.rs 对于一个 crate 来讲,是两个特殊的文件名。rustc 内置了对这两个特殊文件名的处理(当然也可以通过 Cargo.toml 进行配置,不详谈),我们可以认为它们就是一个 crate 的入口。
可执行 crate 和库 crate 是两种不同的 crate。下面我们就来一并说一下它们的兄弟姐妹及其之间的异同。
crate type
执行
rustc --help|grep crate-type
可得到如下输出