如果您需要从 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
中包含相应的外部依赖项。