如果您需要从 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_bulk/bindgen.sh
。
在开发机器上运行脚本,以生成将与构建目标一起提交的 Rust 文件。
构建生成的代码
当您拥有能够根据 C++ 头文件可靠地生成 Rust 文件的脚本后,需要将其添加到 build 中。生成的文件可以是自己的 rust_library
目标,也可以作为另一个 Rust 目标的子模块添加,如 //src/lib/usb_bulk
示例中所示。确保包含 bindgen
中的文件的库目标也在 non_rust_deps
中包含适当的外部依赖项。