crate是 Rust 的编译单元。当调用 rustc some_file.rs
时,some_file.rs
被当作 crate 文件。模块不会单独编译,只有 crate 才会编译。
crate 可以编译成二进制可执行文件(binary)或库文件(library)。
默认情况 下,rustc
将从 crate 产生二进制可执行文件。这种行为可以通过 rustc
的选项 --crate-type
重载。???
库
$ rustc --crate-type=lib rary.rs
$ ls lib*
library.rlib
默认情况下,库会使用 crate 文件的名字,前面加上 “lib” 前缀。
可以使用 #![crate_name = "rary"]
属性覆盖(见13节 crate)
extern crate
extern crate
声明,不仅会链接库,还会用一个与库名相同的模块来存放库里的所有项。
// 链接到 `rary` 库,导入其中的项
extern crate rary;
fn main() {
rary::public_function();
rary::indirect_access();
}
执行:
# library.rlib 是已编译好的库的路径,这里假设它在同一目录下:
$ rustc executable.rs --extern rary=library.rlib && ./executable