Modul perpustakaan

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 membangun sistem, Anda dapat mempertimbangkan makro prosedural Rust ( proc-macros ) sebagai jenis perpustakaan khusus.

perpustakaan_karat

Modul rust_library menghasilkan perpustakaan 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
perpustakaan_karat Menyediakan varian perpustakaan, 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
karat_perpustakaan_rlib Hanya menyediakan varian rlib dari perpustakaan Rust; modul yang hanya menyediakan varian rlib tidak dapat dijamin berfungsi dengan properti rustlibs .
karat_perpustakaan_dylib Hanya menyediakan varian dylib dari perpustakaan Rust; modul yang hanya menyediakan varian dylib tidak dapat dijamin berfungsi dengan properti rustlibs .

karat_ffi

Modul rust_ffi menghasilkan pustaka yang kompatibel dengan C untuk berinteraksi dengan modul CC.

Selain varian _host , pustaka Rust FFI memiliki tipe modul yang mengontrol tautan yang tersedia, ditunjukkan pada tabel berikut.

Jenis Modul Perpustakaan Rust FFI Definisi
karat_ffi Menyediakan kedua varian perpustakaan C: statis dan bersama.
karat_ffi_shared Hanya menyediakan varian perpustakaan bersama C.
karat_ffi_statis Hanya menyediakan varian perpustakaan statis C.

Untuk contoh dasar penggunaan rust_ffi untuk memanggil Rust dari C, lihat halaman Pola Android Rust .

Untuk informasi tentang penggunaan lebih lanjut, kunjungi dokumentasi resmi Rust .

karat_proc_makro

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 Makro Prosedural dari dokumentasi resmi Rust.

Untuk keperluan sistem build, 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 selalu menargetkan host dan tidak menghasilkan kode apa pun yang dapat dijalankan pada perangkat.

Properti perpustakaan Rust yang terkenal

Properti yang ditentukan dalam tabel di bawah ini merupakan tambahan dari properti umum Penting yang berlaku untuk semua modul. Ini sangat penting untuk modul perpustakaan Rust, atau menunjukkan perilaku unik khusus untuk tipe modul rust_library .

Properti Perpustakaan Karat Definisi
batang / nama Properti stem mengontrol nama file perpustakaan keluaran, yang jika tidak, defaultnya adalah name .

Kompiler Rust menerapkan persyaratan tertentu pada nama file perpustakaan, dan sebagai hasilnya, sistem pembangunan menerapkan persyaratan ini untuk menghindari masalah kompilasi. Nama file keluaran harus sesuai dengan format lib<crate_name><suffix> . (Ada ketergantungan di sini pada properti crate_name ).

nama_ peti Ini adalah properti yang diperlukan untuk modul penghasil perpustakaan; itu juga memiliki hubungan dengan nama file keluaran. (Lihat definisi stem .)
ekspor_include_dirs Untuk modul rust_ffi , properti ini mendefinisikan daftar string yang mewakili jalur penyertaan relatif: jalur yang berisi header yang dapat digunakan oleh modul cc dependen.

Tautan Rust_library atau Rust_ffi

Secara default, perangkat yang menargetkan modul perpustakaan Rust selalu ditautkan secara dinamis dengan libstd . Modul host, bagaimanapun, selalu dihubungkan secara statis dengan libstd .

Tautan yang digunakan untuk dependensi rustlibs bergantung pada preferensi tautan modul root. (Misalnya, rust_binary dengan prefer_rlib: true akan menggunakan varian pustaka Rust yang menghubungkan rustlibs dengan rlibs .)

Untuk memungkinkan produksi modul ketergantungan root yang tidak bergantung pada pustaka karat dinamis apa pun (seperti executable statis), rlibs menyediakan varian tautan libstd dinamis dan statis. Varian yang benar secara otomatis ditautkan oleh Soong.