Ada dua jenis modul perpustakaan Rust, satu yang menghasilkan perpustakaan Rust dan satu lagi yang menghasilkan perpustakaan yang kompatibel dengan C. Selain itu, untuk tujuan sistem pembangunan, Anda dapat mempertimbangkan makro prosedural Rust ( proc-macros
) sebagai jenis pustaka khusus.
rust_library
Modul rust_library
menghasilkan pustaka Rust untuk digunakan oleh modul Rust lainnya.
Selain varian _host
, pustaka Rust memiliki tipe modul yang mengontrol tautan yang tersedia.
Jenis Modul Perpustakaan Rust | Definisi |
---|---|
rust_library | Menyediakan varian library, rlib dan dylib . AOSP merekomendasikan jenis modul ini untuk perpustakaan Rust, karena memungkinkan modul untuk bekerja dengan benar ketika terdaftar sebagai ketergantungan di bawah properti rustlibs |
rust_library_rlib | Hanya menyediakan varian rlib dari perpustakaan Rust; modul yang hanya menyediakan varian rlib tidak dapat dijamin berfungsi dengan properti rustlibs . |
rust_library_dylib | Hanya menyediakan varian dylib dari perpustakaan Rust; modul yang hanya menyediakan varian dylib tidak dapat dijamin berfungsi dengan properti rustlibs . |
rust_ffi
Modul rust_ffi
menghasilkan pustaka yang kompatibel dengan C untuk interop dengan modul CC.
Selain varian _host
, pustaka Rust FFI memiliki tipe modul yang mengontrol tautan yang tersedia, yang ditunjukkan pada tabel berikut.
Jenis Modul Perpustakaan FFI Rust | Definisi |
---|---|
rust_ffi | Menyediakan kedua varian pustaka C: statis dan bersama. |
rust_ffi_shared | Hanya menyediakan varian pustaka bersama C. |
rust_ffi_static | Hanya menyediakan varian pustaka statis C. |
Untuk contoh dasar penggunaan rust_ffi
untuk memanggil Rust dari C, lihat halaman Android Rust Patterns .
Untuk informasi tentang penggunaan lebih lanjut, kunjungi dokumentasi resmi Rust .
rust_proc_macro
Makro prosedural karat (proc-makro) dapat berguna untuk memperluas kompiler untuk melakukan transformasi kode sumber atau menyediakan atribut baru. Informasi lebih lanjut dapat ditemukan di halaman Macro Prosedural dari dokumentasi resmi Rust.
Untuk keperluan sistem pembangunan, modul rust_proc_macro
bekerja mirip dengan modul rust_library
. Untuk modul yang bergantung pada rust_proc_macros
, tambahkan nama modul ke properti proc_macros
.
Karena proc_macros
adalah plugin kompiler, mereka harus menargetkan host dan tidak menghasilkan kode apa pun yang akan berjalan di perangkat.
Properti perpustakaan Rust yang terkenal
Properti yang ditentukan dalam tabel di bawah ini adalah tambahan dari Properti umum penting yang berlaku untuk semua modul. Ini sangat penting untuk modul perpustakaan Rust, atau menunjukkan perilaku unik khusus untuk jenis modul rust_library
.
Properti Perpustakaan Rust | Definisi |
---|---|
batang / nama | Properti stem mengontrol nama file perpustakaan keluaran, yang jika tidak default ke name . Kompiler Rust memberlakukan persyaratan tertentu pada nama file perpustakaan, dan sebagai hasilnya, sistem build memberlakukan persyaratan ini untuk menghindari masalah kompilasi. Nama file keluaran harus sesuai dengan format |
peti_nama | Ini adalah properti yang diperlukan untuk modul penghasil perpustakaan; itu juga memiliki hubungan dengan nama file keluaran. (Lihat definisi stem .) |
include_dirs | Untuk modul rust_ffi , properti ini mendefinisikan daftar string yang mewakili relative include paths: path yang berisi header yang dapat digunakan modul cc dependen. |
Tautan rust_library atau rust_ffi
Secara default, modul perpustakaan Rust yang menargetkan perangkat selalu ditautkan secara dinamis dengan libstd
. Modul host, bagaimanapun, selalu ditautkan secara statis terhadap libstd
.
Tautan yang digunakan untuk dependensi rustlibs
bergantung pada preferensi tautan modul root. (Misalnya, rust_binary
dengan prefer_rlibs
akan menggunakan varian pustaka Rust yang menautkan rustlibs
sebagai rlibs
.)
Untuk memungkinkan produksi modul dependensi root yang tidak bergantung pada pustaka rust dinamis apa pun (seperti executable statis), rlibs
menyediakan varian tautan libstd
dinamis dan statis. Varian yang benar secara otomatis ditautkan oleh Soong.