Es gibt zwei Arten von Rust-Bibliotheksmodulen: eines, das Rust-Bibliotheken erstellt, und eines, das C-kompatible Bibliotheken erstellt. Darüber hinaus können Sie für Build-System-Zwecke prozedurale Rust-Makros ( proc-macros
) als einen speziellen Bibliothekstyp betrachten.
rust_library
Das Modul rust_library
erstellt Rust-Bibliotheken zur Verwendung durch andere Rust-Module.
Zusätzlich zu den _host
Varianten verfügen Rust-Bibliotheken über Modultypen, die die verfügbare Verknüpfung steuern.
Modultyp der Rust-Bibliothek | Definition |
---|---|
rust_library | Stellt beide Bibliotheksvarianten rlib und dylib bereit. AOSP empfiehlt diesen Modultyp für Rust-Bibliotheken, da er die ordnungsgemäße Funktion von Modulen ermöglicht, wenn sie als Abhängigkeit unter der Eigenschaft rustlibs aufgeführt sind |
rust_library_rlib | Stellt nur die rlib Variante einer Rust-Bibliothek bereit; Für Module, die nur rlib Varianten bereitstellen, kann nicht garantiert werden, dass sie mit der rustlibs Eigenschaft funktionieren. |
rust_library_dylib | Stellt nur die dylib Variante einer Rust-Bibliothek bereit; Es kann nicht garantiert werden, dass Module, die nur dylib Varianten bereitstellen, mit der rustlibs Eigenschaft funktionieren. |
rust_ffi
Das Modul rust_ffi
erstellt C-kompatible Bibliotheken für die Zusammenarbeit mit CC-Modulen.
Zusätzlich zu den _host
Varianten verfügen Rust FFI-Bibliotheken über Modultypen, die die verfügbare Verknüpfung steuern, wie in der folgenden Tabelle gezeigt.
Rust FFI-Bibliotheksmodultyp | Definition |
---|---|
rust_ffi | Bietet beide C-Bibliotheksvarianten: statisch und gemeinsam genutzt. |
rust_ffi_shared | Stellt nur die gemeinsam genutzte C-Bibliotheksvariante bereit. |
rust_ffi_static | Stellt nur die statische C-Bibliotheksvariante bereit. |
Ein einfaches Beispiel für die Verwendung von rust_ffi
zum Aufrufen von Rust aus C finden Sie auf der Seite Android Rust Patterns .
Informationen zur erweiterten Verwendung finden Sie in der offiziellen Rust-Dokumentation .
rust_proc_macro
Prozedurale Rust-Makros (proc-makros) können nützlich sein, um den Compiler zu erweitern, um Quellcode-Transformationen durchzuführen oder neue Attribute bereitzustellen. Weitere Informationen hierzu finden Sie auf der Seite „Prozedurale Makros“ der offiziellen Rust-Dokumentation.
Für die Zwecke des Build-Systems funktioniert das Modul rust_proc_macro
ähnlich wie die Module rust_library
. Für Module, die von rust_proc_macros
abhängen, fügen Sie den Modulnamen zur Eigenschaft proc_macros
hinzu.
Da es sich bei proc_macros
um Compiler-Plugins handelt, zielen sie zwangsläufig auf den Host ab und erzeugen keinen Code, der auf einem Gerät ausgeführt werden würde.
Bemerkenswerte Eigenschaften der Rust-Bibliothek
Die in der folgenden Tabelle definierten Eigenschaften gelten zusätzlich zu den wichtigen allgemeinen Eigenschaften , die für alle Module gelten. Diese sind entweder besonders wichtig für Rust-Bibliotheksmodule oder weisen ein einzigartiges Verhalten auf, das für den Modultyp rust_library
spezifisch ist.
Eigenschaften der Rust-Bibliothek | Definition |
---|---|
Stamm / Name | Die stem Eigenschaft steuert den Dateinamen der Ausgabebibliothek, der ansonsten standardmäßig name lautet. Der Rust-Compiler stellt bestimmte Anforderungen an Bibliotheksdateinamen, und das Build-System erzwingt diese Anforderungen daher, um Kompilierungsprobleme zu vermeiden. Der Ausgabedateiname muss dem Format |
Kistename | Dies ist eine erforderliche Eigenschaft für bibliotheksproduzierende Module. Es besteht außerdem eine Beziehung zum Ausgabedateinamen. (Siehe die stem .) |
export_include_dirs | Für rust_ffi -Module definiert diese Eigenschaft eine Liste von Zeichenfolgen, die relative Include-Pfade darstellen: Pfade, die Header enthalten, die abhängige cc Module verwenden können. |
Verknüpfung von rust_library oder rust_ffi
Standardmäßig werden Rust-Bibliotheksmodule, die auf Geräte abzielen, immer dynamisch mit libstd
verknüpft. Host-Module sind jedoch immer statisch gegen libstd
gelinkt.
Die für rustlibs
Abhängigkeiten verwendete Verknüpfung hängt von den Verknüpfungseinstellungen des Root-Moduls ab. (Beispielsweise verwendet ein rust_binary
mit prefer_rlib: true
Rust-Bibliotheksvarianten, die rustlibs
als rlibs
verknüpfen.)
Um die Produktion von Root-Abhängigkeitsmodulen zu ermöglichen, die nicht auf dynamische Rust-Bibliotheken (z. B. statische ausführbare Dateien) angewiesen sind, bietet rlibs
sowohl dynamische als auch statische libstd
-Verknüpfungsvarianten. Die richtige Variante wird von Soong automatisch verlinkt.