bindgen 是一個 Rust 庫,用于從 C 語言的頭文件生成 Rust 綁定。要正確運用 bindgen,請按照以下步驟操作:
bindgen。如果沒有,請訪問 Rust 官方網站 安裝 Rust,然后使用以下命令安裝 bindgen:cargo install bindgen
cargo new my_project
cd my_project
Cargo.toml 文件中,添加 bindgen 作為依賴項:[dependencies]
bindgen = "0.59.2"
wrapper.h 的 C 語言頭文件,其中包含你想要從 Rust 訪問的函數和類型聲明:// wrapper.h
#ifndef WRAPPER_H
#define WRAPPER_H
int add(int a, int b);
#endif // WRAPPER_H
src 目錄下創建一個名為 build.rs 的文件,用于編寫構建腳本。在這個文件中,我們將使用 bindgen 生成 Rust 綁定:// build.rs
extern crate bindgen;
use std::env;
use std::path::PathBuf;
fn main() {
// 指定頭文件的路徑
let bindings = bindgen::Builder::default()
.header("wrapper.h")
.generate()
.expect("Unable to generate bindings");
// 將生成的綁定寫入一個 Rust 文件
let out_path = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}
src 目錄下創建一個名為 main.rs 的文件,用于編寫 Rust 代碼。在這個文件中,我們將使用生成的綁定來調用 C 語言函數:// src/main.rs
mod bindings;
fn main() {
let a = 5;
let b = 7;
let result = bindings::add(a, b);
println!("The sum of {} and {} is {}", a, b, result);
}
cargo build 命令構建項目。這將自動運行 build.rs 腳本,生成 bindings.rs 文件,然后編譯 main.rs 文件。如果一切順利,你將看到輸出 “The sum of 5 and 7 is 12”。這就是如何使用 bindgen 從 C 語言頭文件生成 Rust 綁定的基本方法。你可以根據需要調整 wrapper.h 和 build.rs 文件以適應你的項目。