使用 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

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

建構產生的程式碼

有了可從 C++ 標頭可靠產生 Rust 檔案的指令碼後,就必須將其新增至建構作業。產生的檔案可以是自己的 rust_library 目標,也可以納入另一個 Rust 目標的子模組,如//src/lib/usb_rs 範例所示。確認包含 bindgen 檔案的程式庫目標,也在 non_rust_deps 中包含適當的外部依附元件。