庫模塊

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 會自動連結正確的變體。