《通过例子学Rust》第11章 crate

crate(中文有 "包,包装箱" 之意)是 Rust 的编译单元。当调用 rustc some_file.rs 时,some_file.rs 被当作 crate 文件 。如果 some_file.rs 里面含有 mod 声明,那么模块文件的内容将在编译之前被插入 crate 文件的相应声明处。换句话说,模块不会单独被编译,只有 crate 才会被编译。

crate 可以编译成二进制可执行文件(binary)或库文件(library)。默认情况下,rustc 将从 crate 产生二进制可执行文件。这种行为可以通过 rustc 的选项 --crate-type 重载。

11.1 库

让我们创建一个库,然后看看如何把它链接到另一个 crate。

复制代码
// 11.1节 库

pub fn public_function() {
    println!("called rary's 'public_function()'");
}

fn private_function() {
    println!("called rary's 'private_function()'");
}

pub fn indirect_access() {
    print!("called rary's 'indirect_access()', that\n> ");
    private_function();
}

// 编译库  rustc --crate-type=lib rary.rs

PS F:\rustproject\rustbyexample\chapter11\example11_1> rustc --crate-type=lib rary.rs
PS F:\rustproject\rustbyexample\chapter11\example11_1> ls lib*
library.rlib

默认情况下,库会使用 crate 文件的名字,前面加上 "lib" 前缀,但这个默认名称可以使用 crate_name 属性 覆盖。

11.2 使用库

要将一个 crate 链接到上节新建的库,可以使用 rustc--extern 选项。然后将所有的物件导入到与库名相同的模块下。此模块的操作通常与任何其他模块相同。

复制代码
// 11.2节 使用库
fn main() {
    rary::public_function();

    // 报错! `private_function` 是私有的
    //rary::private_function();
    rary::indirect_access();
 
    println!("Hello Rust"); 
}
 
// rustc main.rs --extern rary=library.rlib --edition=2024
// ./main

编译运行:

复制代码
# library.rlib 是已编译好的库的路径,这里假设它在同一目录下:
PS F:\rustproject\rustbyexample\chapter11\example11_1> rustc main.rs --extern rary=library.rlib
PS F:\rustproject\rustbyexample\chapter11\example11_1> ./main
called rary's 'public_function()'
called rary's 'indirect_access()', that
> called rary's 'private_function()'
Hello Rust
PS F:\rustproject\rustbyexample\chapter11\example11_1>
相关推荐
传奇开心果编程1 小时前
【Xilem基础语法学与练】第7课:Xilem与Masonry底层构建技术解析
学习·rust·前端框架
孙启超5 小时前
【AI开发之Rust】第 3 课:字符串与复合类型 —— 数据怎么放
开发语言·人工智能·后端·rust·llm·transformer
柯南466810 小时前
【AI开发之Rust】第 4 课:所有权系统 —— Rust 的灵魂
rust
guwentian10 小时前
Rolldown vs esbuild vs Webpack:Rust 打包器大战我们该怎么选
前端·webpack·rust·esbuild
传奇开心果编程11 小时前
【Rust入门知识点学与练】第26课:Unsafe Rust
开发语言·学习·rust
yume_sibai13 小时前
09-Rust 测试与质量保证(单元测试 + 集成测试 + Mock + Benchmark + Fuzzing + CI/CD)
rust·单元测试·集成测试
传奇开心果编程1 天前
【Xilem 0.4 基础语法学与练】第15课:状态管理与 memoize 性能优化
学习·rust·前端框架
qq_452396231 天前
第三篇:《变量、类型与函数:Rust 的“基本盘”》
开发语言·后端·rust
传奇开心果编程1 天前
【xilem0.4基础语法学与练】第22课:on_click / on_change 与手势系统的实战
学习·rust·前端框架