库模块

Rust 库模块有两种类型,一种生成 Rust 库,另一种生成 C 兼容库。此外,出于构建系统的目的,您可以将 Rust 过程宏 ( proc-macros ) 视为一种特殊类型的库。

铁锈库

rust_library模块生成 Rust 库供其他 Rust 模块使用。

除了_host变体之外,Rust 库还具有控制可用链接的模块类型。

Rust 库模块类型定义
铁锈库提供两个库变体rlibdylib 。 AOSP 建议 Rust 库使用此模块类型,因为它允许模块在rustlibs属性下列为依赖项时正常工作
rust_library_rlib仅提供 Rust 库的rlib变体;仅提供rlib变体的模块不能保证与rustlibs属性一起使用。
rust_library_dylib仅提供 Rust 库的dylib变体;无法保证仅提供dylib变体的模块能够与rustlibs属性一起使用。

铁锈_ffi

rust_ffi模块生成 C 兼容库以与 CC 模块互操作。

除了_host变体之外,Rust FFI 库还具有控制可用链接的模块类型,如下表所示。

Rust FFI 库模块类型定义
铁锈_ffi提供两种 C 库变体:静态和共享。
rust_ffi_共享仅提供 C 共享库变体。
rust_ffi_静态仅提供 C 静态库变体。

有关使用rust_ffi从 C 调用 Rust 的基本示例,请参阅Android Rust 模式页面。

有关更高级用法的信息,请访问Rust 官方文档

rust_proc_宏

Rust 过程宏 (proc-macros) 对于扩展编译器以执行源代码转换或提供新属性非常有用。更多信息可以在官方 Rust 文档的过程宏页面中找到。

出于构建系统的目的, rust_proc_macro模块的工作方式与rust_library模块类似。对于依赖于rust_proc_macros的模块,请将模块名称添加到proc_macros属性中。

由于proc_macros是编译器插件,它们必然以主机为目标,并且不会生成任何可以在设备上运行的代码。

值得注意的 Rust 库属性

下表中定义的属性是对适用于所有模块的重要公共属性的补充。这些要么对 Rust 库模块特别重要,要么表现出特定于rust_library模块类型的独特行为。

Rust 库属性定义
词干/名称stem属性控制输出库文件名,否则默认为name

Rust 编译器对库文件名提出了某些要求,因此构建系统强制执行这些要求以避免编译问题。输出文件名必须符合lib<crate_name><suffix>格式。 (这里依赖于crate_name属性)。

板条箱名称这是库生成模块必需的属性;它还与输出文件名有关系。 (参见stem定义。)
导出包含目录对于rust_ffi模块,此属性定义表示相对包含路径的字符串列表:包含依赖cc模块可以使用的标头的路径。

rust_library 或 rust_ffi 的链接

默认情况下,针对设备的 Rust 库模块始终动态链接到libstd 。然而,主机模块始终与libstd静态链接。

用于rustlibs依赖项的链接取决于根模块的链接首选项。 (例如,带有prefer_rlib: true rust_binary将使用将rustlibs链接为rlibs Rust 库变体。)

为了允许生成不依赖于任何动态 Rust 库(例如静态可执行文件)的根依赖模块, rlibs提供了动态和静态libstd链接变体。 Soong 会自动链接正确的变体。