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_macro
Rust 程序巨集 (proc-macros) 可用於擴充編譯器,以便執行原始碼轉換或提供新的屬性。如需更多資訊,請參閱官方 Rust 說明文件的「程序式巨集」頁面。
就建構系統而言,rust_proc_macro
模組的運作方式與 rust_library
模組類似。對於依附 rust_proc_macros
的模組,請將模組名稱新增至 proc_macros
屬性。
由於 proc_macros
是編譯器外掛程式,因此必須指定主機,且不會產生任何可在裝置上執行的程式碼。
值得注意的 Rust 程式庫屬性
除了適用於所有模組的重要通用屬性,下表中定義的屬性也是如此。這些方法對 Rust 程式庫模組特別重要,或會顯示 rust_library
模組類型專屬的獨特行為。
Rust 程式庫屬性 | 定義 |
---|---|
stem / name | stem 屬性會控制輸出程式庫檔案名稱,否則預設為 name 。
Rust 編譯器會對程式庫檔案名稱設下特定規定,因此建構系統會強制執行這些規定,以避免編譯問題。輸出檔案名稱必須符合 |
crate_name | 這是程式庫產生模組的必要屬性;此外,它與輸出檔案名稱有關係。(請參閱 stem 定義)。 |
export_include_dirs | 對於 rust_ffi 模組,此屬性會定義字串清單,代表相對包含路徑:包含依附 cc 模組可使用的標頭的路徑。 |
rust_library 或 rust_ffi 的連結
根據預設,針對裝置的 Rust 程式庫模組一律會與 libstd
動態連結。不過,主機模組一律會靜態連結至 libstd
。
rustlibs
依附元件使用的連結,取決於根模組的連結偏好設定。(例如,具有 prefer_rlib: true
的 rust_binary
會使用將 rustlibs
連結為 rlibs
的 Rust 程式庫變化版本)。
為了讓您可以產生不依賴任何動態 Rust 程式庫 (例如靜態可執行檔) 的根依附元件模組,rlibs
提供動態和靜態 libstd
連結變化版本。Song 會自動連結正確的變化版本。