#bindings #bindings-generator #code-generation #codegen #env-var

sys autocxx-bindgen

自动生成 Rust FFI 绑定到 C 和 C++ 库。针对 autocxx 调整了版本。

36 个版本

0.69.5 2024年6月25日
0.65.1 2023年6月15日
0.62.1 2023年1月31日
0.62.0 2022年11月3日
0.56.1 2020年12月15日

#70 in FFI

Download history 11660/week @ 2024-04-28 17577/week @ 2024-05-05 16371/week @ 2024-05-12 13971/week @ 2024-05-19 11936/week @ 2024-05-26 19565/week @ 2024-06-02 14178/week @ 2024-06-09 7932/week @ 2024-06-16 3863/week @ 2024-06-23 2087/week @ 2024-06-30 3069/week @ 2024-07-07 2365/week @ 2024-07-14 2497/week @ 2024-07-21 2331/week @ 2024-07-28 2402/week @ 2024-08-04 2211/week @ 2024-08-11

9,578 每月下载量
33 个 Crates 中使用 (via autocxx-engine)

BSD-3-Clause

1MB
23K SLoC

crates.io docs.rs

autocxx-bindgen

这是 bindgen 的一个稍微修改过的版本,它生成适合 autocxx 消费代码。希望这里所有的更改最终都能被合并到 bindgen 中,但考虑到 autocxx 目前还处于实验阶段,我不想强迫 bindgen 适应其奇怪的要求,因此进行了分支。

README 的其余部分来自原始的 bindgen。

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上 hacking 的信息,请参阅CONTRIBUTING.md

依赖关系

~5–12MB
~122K SLoC