116个版本

0.70.1 2024年8月20日
0.69.4 2024年2月4日
0.69.1 2023年11月2日
0.66.1 2023年6月19日
0.0.2 2014年11月21日

#3 in FFI

Download history 898392/week @ 2024-05-04 918519/week @ 2024-05-11 940392/week @ 2024-05-18 908547/week @ 2024-05-25 1010434/week @ 2024-06-01 1010639/week @ 2024-06-08 978844/week @ 2024-06-15 936060/week @ 2024-06-22 904558/week @ 2024-06-29 944217/week @ 2024-07-06 944070/week @ 2024-07-13 1001658/week @ 2024-07-20 991915/week @ 2024-07-27 1006282/week @ 2024-08-03 1062341/week @ 2024-08-10 928488/week @ 2024-08-17

4,167,498 每月下载量
用于 5,742 个crate(1,970个直接使用)

BSD-3-Clause

1MB
22K SLoC

crates.io docs.rs

bindgen

bindgen自动生成Rust FFI绑定到C(以及一些C++)库。

例如,给定C头文件doggo.h

typedef struct Doggo {
    int many;
    char wow;
} Doggo;

void eleven_out_of_ten_majestic_af(Doggo* pupper);

bindgen生成Rust FFI代码,允许你调用doggo库的函数并使用其类型

/* automatically generated by rust-bindgen 0.99.9 */

#[repr(C)]
pub struct Doggo {
    pub many: ::std::os::raw::c_int,
    pub wow: ::std::os::raw::c_char,
}

extern "C" {
    pub fn eleven_out_of_ten_majestic_af(pupper: *mut Doggo);
}

用户指南

📚 在这里阅读bindgen用户指南!📚

MSRV

bindgen最低支持的Rust版本是1.70.0

bindgen-cli最低支持的Rust版本是1.70.0

尚未建立MSRV提升策略,因此MSRV可能会在任何版本中增加。

MSRV是可以用于编译每个crate的最低Rust版本。然而,bindgenbindgen-cli可以生成与低于当前MSRV的Rust版本兼容的绑定。

通常,bindgen-cli crate的MSRV会比bindgen更新,因为如clap这样的crate需要它。

API参考

API参考文档在docs.rs

环境变量

除了库API和可执行命令行API之外,bindgen 还可以通过环境变量进行控制。

最终用户应该设置这些环境变量来修改 bindgen 的行为,而不需要修改 bindgen 直接消费者的源代码。

  • BINDGEN_EXTRA_CLANG_ARGS:传递给 clang 的额外参数
    • 参数由空白字符分隔
    • 使用shell风格的引号来传递空格
    • 示例
      • 指定备用 sysroot: --sysroot=/path/to/sysroot
      • 添加包含搜索路径(含空格): -I"/path/with spaces"
  • BINDGEN_EXTRA_CLANG_ARGS_<TARGET>:类似于 BINDGEN_EXTRA_CLANG_ARGS,但用于设置传递给 clang 的每个目标参数。在具有多个目标的交叉编译环境中,以特定于目标的方式设置系统包含目录非常有用。它具有比 BINDGEN_EXTRA_CLANG_ARGS 更高的优先级。

此外,bindgen 使用 libclang 解析C和C++头文件。要修改 bindgen 搜索 libclang 的方式,请参阅 clang-sys 文档。有关 bindgen 如何使用 libclang 的更多详细信息,请参阅 bindgen 用户指南

版本

我们不遵循特定的发布日历,但如果您需要发布,请提交一个请求该发布的issue(ping @emilio 以提高效率)。

贡献

有关在 bindgen 上进行开发的详细信息,请参阅 CONTRIBUTING.md

依赖

~5–12MB
~123K SLoC