Istnieją dwa typy modułów bibliotecznych Rusta, jeden tworzący biblioteki Rusta i drugi tworzący biblioteki kompatybilne z C. Dodatkowo, na potrzeby systemu kompilacji, możesz rozważyć makra proceduralne Rusta ( proc-macros
) jako specjalny typ biblioteki.
rdza_biblioteka
Moduł rust_library
tworzy biblioteki Rusta do wykorzystania przez inne moduły Rusta.
Oprócz wariantów _host
, biblioteki Rusta posiadają typy modułów kontrolujące dostępne połączenia.
Typ modułu biblioteki Rust | Definicja |
---|---|
rdza_biblioteka | Zapewnia oba warianty bibliotek, rlib i dylib . AOSP zaleca ten typ modułu dla bibliotek Rusta, ponieważ pozwala on na poprawne działanie modułów, gdy są wymienione jako zależność we właściwości rustlibs |
rust_library_rlib | Udostępnia tylko wariant rlib biblioteki Rust; Nie można zagwarantować, że moduły udostępniające tylko warianty rlib będą działać z właściwością rustlibs . |
rust_library_dylib | Zapewnia tylko wariant dylib biblioteki Rust; Nie można zagwarantować, że moduły udostępniające tylko warianty dylib będą działać z właściwością rustlibs . |
rdza_ffi
Moduł rust_ffi
tworzy biblioteki kompatybilne z C, które współpracują z modułami CC.
Oprócz wariantów _host
, biblioteki Rust FFI posiadają typy modułów kontrolujące dostępne połączenia, jak pokazano w poniższej tabeli.
Typ modułu biblioteki Rust FFI | Definicja |
---|---|
rdza_ffi | Zapewnia oba warianty biblioteki C: statyczne i współdzielone. |
rust_ffi_shared | Zapewnia tylko wariant biblioteki współdzielonej C. |
rust_ffi_static | Udostępnia tylko wariant biblioteki statycznej C. |
Podstawowy przykład użycia rust_ffi
do wywołania Rusta z C znajdziesz na stronie Android Rust Patterns .
Aby uzyskać informacje na temat bardziej zaawansowanego użycia, odwiedź oficjalną dokumentację Rusta .
rdza_proc_makro
Makra proceduralne Rusta (proc-makra) mogą być przydatne do rozszerzania kompilatora w celu wykonywania transformacji kodu źródłowego lub zapewniania nowych atrybutów. Więcej informacji na ten temat można znaleźć na stronie Makra proceduralne w oficjalnej dokumentacji Rusta.
Na potrzeby systemu kompilacji moduł rust_proc_macro
działa podobnie do modułów rust_library
. W przypadku modułów zależnych od rust_proc_macros
dodaj nazwę modułu do właściwości proc_macros
.
Ponieważ proc_macros
są wtyczkami kompilatora, koniecznie atakują hosta i nie generują żadnego kodu, który działałby na urządzeniu.
Godne uwagi właściwości biblioteki Rusta
Właściwości zdefiniowane w poniższej tabeli stanowią dodatek do ważnych wspólnych właściwości , które mają zastosowanie do wszystkich modułów. Są one albo szczególnie ważne dla modułów bibliotecznych Rusta, albo wykazują unikalne zachowanie specyficzne dla typu modułu rust_library
.
Właściwości biblioteki Rust | Definicja |
---|---|
łodyga / nazwa | Właściwość stem kontroluje nazwę pliku biblioteki wyjściowej, która w przeciwnym razie domyślnie ma name . Kompilator Rusta nakłada pewne wymagania na nazwy plików bibliotek, w wyniku czego system kompilacji wymusza te wymagania, aby uniknąć problemów z kompilacją. Nazwa pliku wyjściowego musi być zgodna z formatem |
nazwa_skrzynki | Jest to wymagana właściwość w przypadku modułów tworzących biblioteki; dodatkowo ma związek z nazwą pliku wyjściowego. (Zobacz definicję stem .) |
eksport_include_dirs | W przypadku modułów rust_ffi ta właściwość definiuje listę ciągów znaków reprezentujących względne ścieżki dołączania: ścieżki zawierające nagłówki, których mogą używać zależne moduły cc . |
Powiązanie rust_library lub rust_ffi
Domyślnie moduły biblioteki Rusta przeznaczone dla urządzeń są zawsze połączone dynamicznie z libstd
. Jednakże moduły hosta są zawsze połączone statycznie z libstd
.
Powiązanie używane dla zależności rustlibs
zależy od preferencji łączenia modułu głównego. (Na przykład rust_binary
z prefer_rlib: true
użyje wariantów biblioteki Rust, które łączą rustlibs
jako rlibs
.)
Aby umożliwić produkcję modułów zależności root, które nie opierają się na żadnych dynamicznych bibliotekach rdzy (takich jak statyczne pliki wykonywalne), rlibs
udostępnia zarówno dynamiczne, jak i statyczne warianty powiązań libstd
. Właściwy wariant jest automatycznie łączony przez Soong.