Es gibt zwei Arten von Rust-Bibliotheksmodulen: eine, die Rust-Bibliotheken und eine, die C-kompatible Bibliotheken generiert. Außerdem können Sie Rust-prozedurale Makros (proc-macros
) für Build-Systeme als eine spezielle Art von Bibliothek betrachten.
rust_library
Mit dem Modul rust_library
werden Rust-Bibliotheken zur Verwendung durch andere Rust-Module erstellt.
Neben den _host
-Varianten haben Rust-Bibliotheken Modultypen, die die verfügbare Verknüpfung steuern.
Rust-Bibliotheksmodultyp | Definition |
---|---|
rust_library | Bietet beide Bibliotheksvarianten, rlib und dylib . AOSP empfiehlt diesen Modultyp für Rust-Bibliotheken, da Module ordnungsgemäß funktionieren, wenn sie unter der Eigenschaft rustlibs als Abhängigkeit aufgeführt sind. |
rust_library_rlib | Stellt nur die rlib -Variante einer Rust-Bibliothek bereit. Module, die nur rlib -Varianten bereitstellen, funktionieren nicht zwangsläufig mit der rustlibs -Property. |
rust_library_dylib (in englischer Sprache) | Bietet nur die dylib -Variante einer Rust-Bibliothek. Für Module, die nur dylib -Varianten bereitstellen, kann nicht garantiert werden, dass sie mit der rustlibs -Property funktionieren. |
rust_ffi
Das rust_ffi
-Modul generiert C-kompatible Bibliotheken für die Interkonnektivität mit CC-Modulen.
Zusätzlich zu den _host
-Varianten haben Rust-FFI-Bibliotheken Modultypen, die die verfügbare Verknüpfung steuern (siehe folgende Tabelle).
Rust FFI Library Module Type | Definition |
---|---|
rust_ffi | Stellt beide Varianten der C-Bibliothek bereit: statisch und freigegeben. |
rust_ffi_shared | Bietet nur die C-Variante der freigegebenen Bibliothek. |
rust_ffi_statisch | Stellt nur die Variante der statischen C-Bibliothek 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
Rust-prozedurale Makros (Proc-Makros) können nützlich sein, um den Compiler zu erweitern, um Quellcodetransformationen durchzuführen oder neue Attribute bereitzustellen. Weitere Informationen dazu finden Sie in der offiziellen Rust-Dokumentation auf der Seite Procedural Macros (Prozedurale Makros).
Für das Build-System funktioniert das rust_proc_macro
-Modul ähnlich wie die rust_library
-Module. Fügen Sie für Module, die von rust_proc_macros
abhängen, den Modulnamen der Property proc_macros
hinzu.
Da es sich bei proc_macros
um Compiler-Plug-ins handelt, zielen sie zwangsläufig auf den Host ab und generieren keinen Code, der auf einem Gerät ausgeführt werden würde.
Wichtige Eigenschaften von Rust-Bibliotheken
Die in der folgenden Tabelle definierten Attribute gelten zusätzlich zu den wichtigen allgemeinen Attributen, die für alle Module gelten. Diese sind entweder besonders wichtig für Rust-Bibliotheksmodule oder verhalten sich speziell für den Modultyp rust_library
.
Rust-Bibliothek-Eigenschaften | Definition |
---|---|
Stamm / Name | Das Attribut stem steuert den Dateinamen der Ausgabebibliothek. Andernfalls wird standardmäßig name verwendet.
Der Rust-Compiler stellt bestimmte Anforderungen an die Dateinamen von Bibliotheken. Daher erzwingt das Build-System diese Anforderungen, um Kompilierungsprobleme zu vermeiden.
Der Dateiname der Ausgabe muss das Format |
crate_name | Diese Eigenschaft ist für Module erforderlich, die Bibliotheken erstellen. Außerdem hat sie eine Beziehung zum Ausgabedateinamen. (Siehe Definition für stem .) |
export_include_dirs | Für rust_ffi -Module definiert dieses Attribut eine Liste von Strings, die relative Include-Pfade darstellen: Pfade, die Header enthalten, die von abhängigen cc -Modulen verwendet werden können. |
Verknüpfung von rust_library oder rust_ffi
Standardmäßig werden Rust-Bibliotheksmodule, die auf Geräte ausgerichtet sind, immer dynamisch mit libstd
verknüpft. Hostmodule sind jedoch immer statisch mit libstd
verknüpft.
Die Verknüpfung, die für rustlibs
-Abhängigkeiten verwendet wird, hängt von den Verknüpfungseinstellungen des Stammmoduls ab. Beispiel: Bei rust_binary
mit prefer_rlib: true
werden Rust-Bibliotheksvarianten verwendet, die rustlibs
als rlibs
verknüpfen.
Um die Produktion von Root-Abhängigkeitsmodulen zu ermöglichen, die nicht auf dynamischen Rust-Bibliotheken basieren (z. B. statische ausführbare Dateien), bietet rlibs
sowohl dynamische als auch statische libstd
-Verknüpfungsvarianten. Die richtige Variante wird automatisch von Soong verknüpft.