C++ für Rust-FFI-Grenzen
Stellen Sie C++-Funktionen für die Nutzung durch Rust-FFI und auch in umgekehrter Richtung bereit.
C++ für Rust-FFI-Grenzen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
C++ und Rust
Rust und C++ sind beide kompilierte, hardwarenahe Sprachen — aber sie haben unterschiedliche ABIs und inkompatible Typsysteme. Typischerweise erfolgt die Interoperabilität über eine C-ABI-Brücke.
Rust zu C++: extern "C"
Exportieren Sie Rust-Funktionen mit extern "C" und #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}C++ ruft Rust auf
Deklarieren Sie die Rust-Funktion in C++ und linken Sie sie mit der statischen Rust-Bibliothek.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);C++ zu Rust
Die umgekehrte Richtung — Rust ruft C++ auf. Kapseln Sie C++ in extern "C" und deklarieren Sie es in Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Statische Bibliotheken linken
Erstellen Sie das Rust-Crate als staticlib oder cdylib und linken Sie es mit dem C++-Build.
# Cargo.toml
[lib]
crate-type = ["staticlib"]Bindgen und Cbindgen
Generieren Sie FFI-Deklarationen automatisch:
- bindgen — generiert Rust-Bindings aus C++-Headern
- cbindgen — generiert C/C++-Header aus Rust-Code
cxx-Crate
Das cxx-Crate bietet eine sicherere, höher abstrahierte C++/Rust-Interoperabilität. Sie deklarieren ein gemeinsames Schema; cxx generiert auf beiden Seiten typsichere Bindings.
Speicherbesitz über FFI
Beide Sprachen verfügen über RAII, aber über unterschiedliche Besitzmodelle. Übergeben Sie besitzende Daten als Wert und geliehene Daten als Raw Pointer — und dokumentieren Sie, wer was freigibt.
Strings über FFI
Rust-String und C++-std::string sind inkompatibel. Verwenden Sie *const c_char (nullterminiert) oder (*const u8, usize) (Zeiger plus Länge).
Ausnahmen vs. Panics
Rust-Panics und C++-Ausnahmen überqueren die FFI-Grenze nicht sicher. Fangen Sie C++-Ausnahmen an der Grenze ab; verwenden Sie auf der Rust-Seite std::panic::catch_unwind.
Build-Integration
Verwenden Sie ein Meta-Build-System: CMake, das Cargo aufruft, oder Cargo, das CMake über ein Build-Skript (build.rs) aufruft. Das cxx crate unterstützt gängige Muster.
Beispiele aus der Praxis
Viele Produktiv-Codebasen kombinieren C++ und Rust: Mozilla Firefox verwendet Rust-Komponenten innerhalb einer C++-Engine; Chromium experimentiert mit Rust-Modulen; viele Kryptobibliotheken bieten Bindings für beide Sprachen an.
Kurzer Test
Welches Rust-Attribut deaktiviert das Name Mangling, damit C/C++ das Symbol finden kann?
Zusammenfassung
C++ und Rust interagieren über die C ABI. Verwenden Sie extern "C" und #[no_mangle]. Generieren Sie Bindings mit bindgen und cbindgen oder verwenden Sie das cxx crate für sicherere typisierte Bridges. Behandeln Sie Ownership, Strings und Panics über die Grenze hinweg sorgfältig.
Häufig gestellte Fragen
Ist die Lektion „C++ für Rust-FFI-Grenzen“ kostenlos?
Ja — der vollständige Text von „C++ für Rust-FFI-Grenzen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „C++ für Rust-FFI-Grenzen“?
Stellen Sie C++-Funktionen für die Nutzung durch Rust-FFI und auch in umgekehrter Richtung bereit. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „C++ für Rust-FFI-Grenzen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Extern C und die C-ABI
- Python aus C++ über pybind11 aufrufen
- C++ für Rust-FFI-Grenzen
- SWIG für sprachübergreifende Bindings verwenden