使用 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 来实现此目的。

生成 Rust 代码

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

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

构建生成的代码

获得能够可靠地从 C++ 头文件生成 Rust 文件的脚本后,需要将其添加到 build 中。生成的文件可以作为独立的 rust_library 目标,也可以作为另一个 Rust 目标的子模块包含在其中,如//src/lib/usb_rs 示例中所示。确保包含 bindgen 中文件的库目标也在 non_rust_deps 中包含相应的外部依赖项。