使用 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 完成。在附有 homebrew 的 macOS 系統上,通常可使用 brew install llvm 完成這項作業。

產生 Rust 程式碼

雖然產生的程式碼會在 Git 中簽到,但所有協作者都必須能輕鬆更新產生的程式碼。這個步驟的第一步是在目標目錄中建立名為 bindgen.sh 的可執行檔案。如需使用預先建構的 bindgen 二進位檔的範例並進一步自訂輸出內容的範例,請參閱 //src/lib/usb_bulk/bindgen.sh

在開發機器上執行指令碼,產生要與建構目標修訂的 Rust 檔案。

建構產生的程式碼

當您備妥可透過 C++ 標頭穩定產生 Rust 檔案的指令碼後,就必須將其新增至建構作業。產生的檔案可以是本身的 rust_library 目標,也可以是其他 Rust 目標的子模組,如 //src/lib/usb_bulk 範例所示。確認包含 bindgen 檔案的程式庫目標也在 non_rust_deps 中也包含適當的外部依附元件。