#bindings-generator #bindings #code-generation #codegen

app bindgen-cli

自动生成Rust FFI绑定到C和C++库

16个版本 (8个重大更新)

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.63.0 2022年11月22日

#52 in FFI

Download history 13100/week @ 2024-05-04 11545/week @ 2024-05-11 11379/week @ 2024-05-18 10994/week @ 2024-05-25 13789/week @ 2024-06-01 12287/week @ 2024-06-08 10348/week @ 2024-06-15 9919/week @ 2024-06-22 10476/week @ 2024-06-29 10826/week @ 2024-07-06 10749/week @ 2024-07-13 9158/week @ 2024-07-20 12859/week @ 2024-07-27 11664/week @ 2024-08-03 11520/week @ 2024-08-10 10205/week @ 2024-08-17

47,443每月下载量

BSD-3-Clause

1MB
23K 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-clicrate的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用户指南

版本

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

贡献

有关在bindgen上hack的详细信息,请参阅CONTRIBUTING.md

依赖项

~6–13MB
~145K SLoC