Rust 程式庫模組有兩種,一種用於產生 Rust 程式庫,一種則用於產生 C 相容程式庫。此外,為了建構系統,您可以將 Rust 程序巨集 (proc-macros
) 視為特殊類型的程式庫。
rust_library
rust_library
模組會產生 Rust 程式庫,供其他 Rust 模組使用。
除了 _host
變體之外,Rust 程式庫還有模組類型,可控制可用的連結。
Rust 程式庫模組類型 | 定義 |
---|---|
rust_library | 提供 rlib 和 dylib 這兩種程式庫變化版本。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 編譯器對程式庫檔案名稱設有特定要求,因此建構系統會強制執行這些要求,避免發生編譯問題。輸出檔案名稱必須符合 |
crate_name | 這是程式庫產生模組的必要屬性,且與輸出檔案名稱有關係。(請參閱 stem 定義)。 |
export_include_dirs | 如果是 rust_ffi 模組,這個屬性會定義代表相對 include 路徑的字串清單:這類路徑包含依附的 cc 模組可以使用的標頭。 |
rust_library 或 rust_ffi 的連結
根據預設,針對裝置的 Rust 程式庫模組一律會與 libstd
動態連結。不過,主機模組一律會靜態連結至 libstd
。
rustlibs
依附元件使用的連結取決於根模組的連結偏好設定。(例如,具有 prefer_rlib: true
的 rust_binary
會使用將 rustlibs
連結為 rlibs
的 Rust 程式庫變化版本)。
為了讓您可以產生不依賴任何動態 Rust 程式庫 (例如靜態可執行檔) 的根依附元件模組,rlibs
提供動態和靜態 libstd
連結變化版本。Song 會自動連結正確的變化版本。