SuperAPI AI 工具集

rust-ffi

编程与开发

查看项目

更新于 10-15 12:45

技能介绍

用途

rust-ffi 技能用于指导智能体处理 Rust 的外部函数接口(Foreign Function Interface),即 Rust 与 C 之间的互操作。典型问题包括:如何从 Rust 调用 C 库、如何用 bindgen 生成 Rust 绑定、如何将 Rust 函数导出以便 C 调用、如何为不安全的 C API 编写安全封装、如何在 Rust 中链接系统库,以及什么是 sys crate、如何组织其结构。

主要能力

该技能围绕以下六个方面展开:

  1. 不使用 bindgen 调用 C(手动声明):通过 extern "C" 手动声明外部 C 函数,使用 std::ffi 中的 c_int、c_char、c_void、CStr、CString 等类型,并在调用时使用 unsafe 块。

  2. 使用 bindgen 自动生成绑定:在 Cargo.toml 中添加 bindgen 为构建依赖,在 build.rs 中配置头文件、clang 参数、allowlist/blocklist、派生特质等,将生成的绑定写入 OUT_DIR,再在 src/lib.rs 中通过 include! 引入。

  3. sys crate 模式:将底层绑定(mylib-sys)与安全封装(mylib)分离。sys crate 的 Cargo.toml 使用 links 字段声明所链接的库,build.rs 中可先用 pkg-config 探测系统库,失败则回退到用 cc crate 编译 vendored 源码。

  4. 编写安全封装:在安全 crate 中封装原始句柄,实现 Send、Sync(附安全性说明)、构造/处理方法以及 Drop 以释放资源,将不安全性局限在内部。

  5. 使用 cbindgen 将 Rust 导出到 C:用 #[no_mangle] pub extern "C" 导出函数,借助 Box::into_raw/Box::from_raw 管理指针生命周期,在 build.rs 中用 cbindgen 生成 C 头文件。

  6. 在 build.rs 中链接库:支持静态库、动态库、macOS framework,以及用 cc crate 编译 C 源码。

使用方式

该技能以问题触发(Triggers)的方式工作,例如“如何从 Rust 调用 C 库”“如何使用 bindgen 生成绑定”“如何将 Rust 函数导出给 C 调用”等。技能内提供了各工作流的具体代码示例,可直接参考。关于 bindgen 与 cbindgen 的配置细节,技能指向 references/bindgen-cbindgen.md。

适用场景

适用于在 Rust 项目中集成现有 C 库、为 C API 提供安全 Rust 接口、将 Rust 实现暴露给 C 代码调用,以及组织 sys crate 与安全封装分层的场景。

限制

资料未提供具体的收费、价格、平台兼容性与效果保证等信息;上述内容仅依据给定资料整理。此外,技能中引用的外部参考文件内容未在此提供。