C++ för Rust-FFI-gränser
Exponera C++-funktioner för användning via Rust FFI och i motsatt riktning
C++ för Rust-FFI-gränser är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.
C++ och Rust
Rust och C++ är båda kompilerade lågnivåspråk — men de har olika ABI:er och inkompatibla typsystem. De samverkar vanligtvis via en brygga med C-ABI.
Rust till C++: extern "C"
Exportera Rust-funktioner med extern "C" och #[no_mangle].
// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}C++ anropar Rust
Deklarera Rust-funktionen i C++ och länka med Rusts statiska bibliotek.
// C++
extern "C" int add(int a, int b);
std::cout << add(2, 3);C++ till Rust
Omvänd riktning — Rust anropar C++. Omslut C++ med extern "C" och deklarera det i Rust.
// C++
extern "C" int multiply(int a, int b) {
return a * b;
}
// Rust
extern "C" {
fn multiply(a: i32, b: i32) -> i32;
}Länka statiska bibliotek
Bygg Rust-cratet som en staticlib eller cdylib och länka det med C++-bygget.
# Cargo.toml
[lib]
crate-type = ["staticlib"]bindgen och cbindgen
Autogenerera FFI-deklarationer:
- bindgen — genererar Rust-bindningar från C++-headers
- cbindgen — genererar C/C++-headers från Rust-kod
cxx-cratet
cxx-cratet tillhandahåller säkrare interoperabilitet på högre nivå mellan C++ och Rust. Deklarera ett gemensamt schema; cxx genererar typsäkra bindningar på båda sidor.
Minnesägarskap över FFI
Båda språken har RAII, men olika ägarskapsmodeller. Skicka ägd data som värde och lånad data som en råpekare — och dokumentera vem som frigör vad.
Strängar över FFI
Rusts String och C++ std::string är inkompatibla. Använd *const c_char (nollterminerad) eller (*const u8, usize) (pekare + längd).
Undantag kontra panic
Rust-panic och C++-undantag passerar inte FFI-gränsen på ett säkert sätt. Fånga C++-undantag vid gränsen och använd std::panic::catch_unwind på Rust-sidan.
Byggintegrering
Använd ett metabyggsystem: CMake som anropar Cargo, eller Cargo som anropar CMake via ett byggskript (build.rs). Crate-paketet cxx hanterar vanliga mönster.
Verkliga exempel
Många produktionskodbaser kombinerar C++ och Rust: Mozilla Firefox använder Rust-komponenter i en C++-motor, Chromium experimenterar med Rust-moduler och många kryptobibliotek tillhandahåller bindningar för båda språken.
Snabbtest
Vilket Rust-attribut stänger av namnmangling så att C/C++ kan hitta symbolen?
Sammanfattning
C++ och Rust samverkar via C ABI. Använd extern "C" och #[no_mangle]. Generera bindningar med bindgen och cbindgen, eller använd cxx-crate för säkrare typade bryggor. Hantera ägarskap, strängar och panic noggrant över gränsen.
Lär dig C++ med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”C++ för Rust-FFI-gränser” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”C++ för Rust-FFI-gränser”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”C++ för Rust-FFI-gränser”?
Exponera C++-funktioner för användning via Rust FFI och i motsatt riktning Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C++ Academy?
Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”C++ för Rust-FFI-gränser”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C++ Academy-lektionen?
Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Extern C och C-ABI
- Anropa Python från C++ via pybind11
- C++ för Rust-FFI-gränser
- Använda SWIG för bindningar till flera språk