crate是 Rust 的编译单元。当调用 rustc some_file.rs 时,some_file.rs 被当作 crate 文件。模块不会单独编译,只有 crate 才会编译。
crate 可以编译成二进制可执行文件(binary)或库文件(library)。
默认情况 下,rustc 将从 crate 产生二进制可执行文件。这种行为可以通过 rustc 的选项 --crate-type 重载。???

  1. $ rustc --crate-type=lib rary.rs
  2. $ ls lib*
  3. library.rlib

默认情况下,库会使用 crate 文件的名字,前面加上 “lib” 前缀。
可以使用 #![crate_name = "rary"] 属性覆盖(见13节 crate)

extern crate

extern crate 声明,不仅会链接库,还会用一个与库名相同的模块来存放库里的所有项。

  1. // 链接到 `rary` 库,导入其中的项
  2. extern crate rary;
  3. fn main() {
  4. rary::public_function();
  5. rary::indirect_access();
  6. }

执行:

  1. # library.rlib 是已编译好的库的路径,这里假设它在同一目录下:
  2. $ rustc executable.rs --extern rary=library.rlib && ./executable