用途:处理 Rust 与 C 的双向互操作。从 Rust 调用 C 库时,可手写 unsafe extern "C" 声明,或用 bindgen 从头文件生成绑定;把 Rust 库暴露给 C 时,用 extern "C" 加 #[unsafe(no_mangle)] 导出,并用 cbindgen 生成 .h 文件。
主要能力:讲解 Rust 2024 版规则,extern 块必须写 unsafe extern "C",no_mangle 等属性必须写成 #[unsafe(no_mangle)];FFI 共享类型必须用 #[repr(C)],单字段包装用 #[repr(transparent)],C 风格枚举用 #[repr(u8)] 等固定标签大小;字符串用 CString/CStr 桥接,文件描述符用 OwnedFd(拥有、Drop 关闭)与 BorrowedFd<'_>(借用),避免在 API 类型中使用 RawFd;回调使用 extern "C" fn 加 *mut c_void 用户数据,不能用带捕获的闭包;错误用状态码或出参传递,panic 不得跨 extern "C" 边界;外部资源用 Drop 守卫配对释放。
使用方式:bindgen 在 build.rs 中调用,生成 bindings.rs 到 OUT_DIR,再通过 include! 引入,并用 allowlist_* 限制绑定范围;cbindgen 通过 cbindgen.toml 配置,可在 build.rs 或发布前一次性运行生成头文件。
适用场景:调用 C 库、向 C 或其他语言导出 Rust API、定义共享结构体、传递字符串与文件描述符、注册回调、处理跨语言错误。
限制:资料未提供具体版本兼容范围、平台差异细节与性能数据;生成的头文件不应手工修改,需重新生成。