使用Rust庫bindgen
本文展示如何使用Rust庫bindgen。bindgen
是一個非常好用的工具,它可以自動地爲你的C語言庫生成binding。下面我們就開始吧!
創建工程
首先在你要創建工程的地方使用cargo new rust_bindgen_example
,該命令會自動生成一個名爲 rust_bindgen_example 的工程文件夾,
C部分
在src
文件夾中分別創建了 hello.c
,hello.h
兩個文件,其提供了函數hello_from_c()
的實現,該函數在標準輸出中打印“Hello from C ”。
最後在工程根目錄創建 wrapper.h
,該文件包含了 hello.h
,最後提供給bindgen
進行bind。
注:博主將C生成的庫文件libhello.a
放在了目錄build
中,見Makefile
Rust部分
創建文件 build.rs
文件,其中println!("cargo:rustc-link-search={}", lib_path.display());
告訴了Rustc編譯器應該在哪裏去找庫文件。博主的是build
文件夾。
在src/main.rs
文件中,包含 bindgen 的輸出文件 binding.rs
,並使用一個 unsafe 函數對 C 提供的函數進行包裝(這是Rust推薦的使用方式)。最後在 main
函數中調用該函數即可。
代碼
博主已將整個工程託管在github上,歡迎 issue 和 PR。