0Pricing
C++ Academy · 课时

面向 Rust FFI 边界的 C++

公开 C++ 函数供 Rust FFI 调用,也实现反向调用

面向 Rust FFI 边界的 C++ 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。

C++ 与 Rust

Rust 和 C++ 都是编译型底层语言,但它们具有不同的 ABI 和不兼容的类型系统。它们通常通过 C ABI 桥接进行互操作。

Rust 到 C++:extern "C"

请使用 extern "C" 和 #[no_mangle] 导出 Rust 函数。

// Rust
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
    a + b
}

C++ 调用 Rust

请在 C++ 中声明 Rust 函数,并与 Rust 静态库链接。

// C++
extern "C" int add(int a, int b);

std::cout << add(2, 3);

C++ 到 Rust

反向调用——由 Rust 调用 C++。请将 C++ 包裹在 extern "C" 中,并在 Rust 中声明它。

// C++
extern "C" int multiply(int a, int b) {
    return a * b;
}

// Rust
extern "C" {
    fn multiply(a: i32, b: i32) -> i32;
}

链接静态库

请将 Rust crate 构建为 staticlib 或 cdylib,然后与 C++ 构建结果链接。

# Cargo.toml
[lib]
crate-type = ["staticlib"]

Bindgen 和 Cbindgen

自动生成 FFI 声明:

  • bindgen——从 C++ 头文件生成 Rust 绑定
  • cbindgen——从 Rust 代码生成 C/C++ 头文件

cxx Crate

cxx crate 提供更安全、更高层的 C++/Rust 互操作能力。请声明共享模式;cxx 会在两端生成具有强类型的绑定。

跨 FFI 的内存所有权

两种语言都有 RAII,但所有权模型不同。请按值传递自有数据,按原始指针传递借用数据,并记录每一方负责释放哪些资源。

跨 FFI 传递字符串

Rust String 和 C++ std::string 互不兼容。请使用 *const c_char(以空字符结尾),或使用 (*const u8, usize)(指针加长度)。

异常与恐慌

Rust 的恐慌机制和 C++ 异常无法安全地跨越 FFI 边界。在边界处捕获 C++ 异常;在 Rust 侧使用 std::panic::catch_unwind。

构建集成

请使用元构建系统:让 CMake 调用 Cargo,或通过构建脚本(build.rs)让 Cargo 调用 CMake。cxx crate 处理常见模式。

实际案例

许多生产级代码库混合使用 C++ 和 Rust:Mozilla Firefox 在 C++ 引擎中使用 Rust 组件;Chromium 正在试验 Rust 模块;许多加密库同时提供两种语言的绑定。

快速检查

哪个 Rust 属性可以禁用名称修饰,使 C/C++ 能够找到该符号?

回顾

C++ 和 Rust 通过 C ABI 进行互操作。请使用 extern "C" 和 #[no_mangle]。您可以使用 bindgen 和 cbindgen 生成绑定,也可以使用 cxx crate 构建更安全的类型化桥接。请谨慎处理边界两侧的所有权、字符串和恐慌机制。

常见问题解答

「面向 Rust FFI 边界的 C++」课时是免费的吗?

是的 — 「面向 Rust FFI 边界的 C++」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。

「面向 Rust FFI 边界的 C++」这节课中我会学到什么?

公开 C++ 函数供 Rust FFI 调用,也实现反向调用 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C++ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「面向 Rust FFI 边界的 C++」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C++ Academy 课中编写并运行代码吗?

能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Extern C 与 C ABI
  2. 通过 pybind11 从 C++ 调用 Python
  3. 面向 Rust FFI 边界的 C++
  4. 使用 SWIG 生成多语言绑定
← 返回 C++ Academy