使用 bindgen 集成 C/C++

如果您需要从 Rust 调用某些 C 或 C++ API,可以使用 bindgen,它会根据 C 和 C++ 头文件生成 Rust 代码。如需查看更多文档,请参阅 bindgen 用户指南

要求

我们的 bindgen 预构建目前会动态链接到 Clang,这意味着您的库搜索路径中必须有 libclang.so

在基于 Debian 的系统上,通常可以使用 sudo apt install llvm-dev libclang-dev clang 完成此操作。在装有自制的 macOS 系统上,通常可以使用 brew install llvm 完成此操作。

生成 Rust 代码

虽然生成的代码将签入 Git,但任何贡献者都可以轻松更新生成的代码,这一点非常重要。第一步是在目标目录中创建一个名为 bindgen.sh 的可执行文件。如需查看使用我们预构建的 bindgen 二进制文件并进一步自定义输出的示例,请参阅 //src/lib/usb_bulk/bindgen.sh

在开发机器上运行脚本,以生成将与构建目标一起提交的 Rust 文件。

构建生成的代码

当您拥有能够根据 C++ 头文件可靠地生成 Rust 文件的脚本后,需要将其添加到 build 中。生成的文件可以是自己的 rust_library 目标,也可以作为另一个 Rust 目标的子模块添加,如 //src/lib/usb_bulk 示例中所示。确保包含 bindgen 中的文件的库目标也在 non_rust_deps 中包含适当的外部依赖项。