Rust 庫模組有兩種類型,一種產生 Rust 庫,另一種產生 C 相容庫。此外,出於建置系統的目的,您可以將 Rust 流程巨集 ( proc-macros
) 視為特殊類型的程式庫。
鐵鏽庫
rust_library
模組產生 Rust 函式庫供其他 Rust 模組使用。
除了_host
變體之外,Rust 庫還具有控制可用連結的模組類型。
Rust 庫模組類型 | 定義 |
---|---|
鐵鏽庫 | 提供兩個庫變體rlib 和dylib 。 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 編譯器對函式庫檔案名稱提出了某些要求,因此建置系統強制執行這些要求以避免編譯問題。輸出檔名必須符合 |
板條箱名稱 | 這是庫生成模組必需的屬性;它也與輸出檔名有關係。 (參見stem 定義。) |
匯出包含目錄 | 對於rust_ffi 模組,此屬性定義表示相對包含路徑的字串清單:包含依賴cc 模組可以使用的標頭的路徑。 |
rust_library 或 rust_ffi 的鏈接
預設情況下,針對裝置的 Rust 函式庫模組總是會動態連結到libstd
。然而,主機模組始終與libstd
靜態連結。
用於rustlibs
依賴項的連結取決於根模組的連結首選項。 (例如,帶有prefer_rlib: true
rust_binary
將使用將rustlibs
連結為rlibs
Rust 庫變體。)
為了允許產生不依賴任何動態 Rust 函式庫(例如靜態執行檔)的根依賴模組, rlibs
提供了動態和靜態libstd
連結變體。 Soong 會自動連結正確的變體。