程式庫模組

Rust 程式庫模組有兩種,一種用於產生 Rust 程式庫,一種則用於產生 C 相容程式庫。此外,為了建構系統,您可以將 Rust 程序巨集 (proc-macros) 視為特殊類型的程式庫。

rust_library

rust_library 模組會產生 Rust 程式庫,供其他 Rust 模組使用。

除了 _host 變體之外,Rust 程式庫還有模組類型,可控制可用的連結。

Rust 程式庫模組類型 定義
rust_library 提供 rlibdylib 這兩種程式庫變化版本。AOSP 建議將這個模組類型用於 Rust 程式庫,因為這樣一來,當模組列為 rustlibs 屬性下的依附元件時,就能夠正常運作
rust_library_rlib 只提供 Rust 程式庫的 rlib 變數;只提供 rlib 變數的模組無法保證可與 rustlibs 屬性搭配運作。
rust_library_dylib 只提供 Rust 程式庫的 dylib 變數;只提供 dylib 變數的模組無法保證可搭配 rustlibs 屬性運作。

rust_ffi

rust_ffi 模組會產生與 C 相容的程式庫,以與 CC 模組的互通性。

除了 _host 變化版本之外,Rust FFI 程式庫也有可控制可用連結的模組類型,如下表所示。

Rust FFI 程式庫模組類型 定義
rust_ffi 同時提供 C 程式庫變化版本:靜態和共用。
rust_ffi_shared 僅提供 C 共用程式庫變化版本。
rust_ffi_static 僅提供 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 / 名稱 stem 屬性會控制輸出程式庫檔案名稱,否則預設為 name

Rust 編譯器對程式庫檔案名稱設有特定要求,因此建構系統會強制執行這些要求,避免發生編譯問題。輸出檔案名稱必須符合 lib<crate_name><suffix> 格式。(這裡有一個 crate_name 屬性的依附元件)。

crate_name 這是程式庫產生模組的必要屬性,且與輸出檔案名稱有關係。(請參閱 stem 定義)。
export_include_dirs 如果是 rust_ffi 模組,這個屬性會定義代表相對 include 路徑的字串清單:這類路徑包含依附的 cc 模組可以使用的標頭。

rust_library 或 rust_ffi 的連結

根據預設,針對裝置的 Rust 程式庫模組一律會與 libstd 動態連結。不過,主機模組一律會靜態連結至 libstd

rustlibs 依附元件使用的連結取決於根模組的連結偏好設定。(例如,具有 prefer_rlib: truerust_binary 會使用將 rustlibs 連結為 rlibs 的 Rust 程式庫變化版本)。

為了讓您可以產生不依賴任何動態 Rust 程式庫 (例如靜態可執行檔) 的根依附元件模組,rlibs 提供動態和靜態 libstd 連結變化版本。Song 會自動連結正確的變化版本。