在使用 Rust 开发高性能应用时,我们经常需要调用已有的 C/C++ 库。然而,手动编写 FFI(Foreign Function Interface) 绑定既繁琐又容易出错。幸运的是,bindgen 工具可以自动为我们生成这些绑定!本文将带你从零开始,学会如何使用 Rust bindgen 自动生成 C 库的 Rust 绑定。

bindgen 是一个由 Rust 官方团队维护的工具,它可以解析 C/C++ 头文件,并自动生成对应的 Rust FFI 绑定代码。这大大简化了在 Rust 中使用 C 库的过程,是实现 Rust FFI绑定 的首选方案。
首先,你需要确保系统中已安装:
rustup 安装)gcc 或 clang)libclang(用于解析 C 头文件)然后,全局安装 bindgen 命令行工具:
cargo install bindgen-cli假设我们有一个名为 math.h 的 C 头文件,内容如下:
// math.h#ifndef MATH_H#define MATH_Hint add(int a, int b);int multiply(int a, int b);#endif对应的 C 实现文件 math.c:
// math.c#include "math.h"int add(int a, int b) { return a + b;}int multiply(int a, int b) { return a * b;}cargo new rust_math_bindgencd rust_math_bindgen编辑 Cargo.toml,添加 bindgen 作为构建依赖:
[package]name = "rust_math_bindgen"version = "0.1.0"edition = "2021"[build-dependencies]bindgen = "0.69"[dependencies]在项目根目录创建 build.rs 文件:
// build.rsuse std::env;use std::path::PathBuf;fn main() { // 告诉 Cargo 链接我们的 C 库 println!("cargo:rustc-link-search=native=.")); println!("cargo:rustc-link-lib=static=math"); // 编译 C 源文件(可选,也可提前编译好) cc::Build::new() .file("math.c") .compile("math"); // 使用 bindgen 生成绑定 let bindings = bindgen::Builder::default() .header("math.h") .parse_callbacks(Box::new(bindgen::CargoCallbacks)) .generate() .expect("Unable to generate bindings"); // 写入 bindings.rs let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); bindings .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!");}注意:这里我们还用到了 cc crate 来编译 C 文件。记得在 Cargo.toml 的 [build-dependencies] 中添加:
cc = "1.0"修改 src/main.rs:
// src/main.rsinclude!(concat!(env!("OUT_DIR"), "/bindings.rs"));fn main() { unsafe { let sum = add(3, 4); let product = multiply(5, 6); println!("3 + 4 = {}", sum); println!("5 * 6 = {}", product); }}cargo run输出:
3 + 4 = 75 * 6 = 30unsafe,调用时需谨慎。int、size_t)映射为 Rust 类型(如 c_int、usize)。.blacklist_function() 排除特定函数。通过本文,你已经学会了如何使用 Rust bindgen 工具来自动生成 C 库的 Rust 绑定。这种方法不仅高效,还能避免手动编写 FFI 时的错误。无论是集成系统库还是第三方 C 库,自动生成Rust绑定 都能显著提升开发效率。
记住,C库Rust绑定 是 Rust 生态中连接底层系统的重要桥梁,而 bindgen 正是这座桥梁的最佳建造者!
现在,快去试试为你自己的 C 项目生成 Rust 绑定吧!
本文由主机测评网于2025-12-05发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123516.html