93个版本

0.27.0 2024年8月10日
0.26.0 2023年9月13日
0.25.0 2023年8月25日
0.24.6 2023年5月31日
0.1.19 2017年7月21日

#6 in FFI

Download history 370917/week @ 2024-05-04 437546/week @ 2024-05-11 422334/week @ 2024-05-18 461423/week @ 2024-05-25 514970/week @ 2024-06-01 501897/week @ 2024-06-08 443461/week @ 2024-06-15 433424/week @ 2024-06-22 461767/week @ 2024-06-29 494863/week @ 2024-07-06 502104/week @ 2024-07-13 514241/week @ 2024-07-20 498712/week @ 2024-07-27 453728/week @ 2024-08-03 552317/week @ 2024-08-10 531389/week @ 2024-08-17

2,133,738每月下载量
用于 196 个crate(137个直接使用)

MPL-2.0 许可证

490KB
12K SLoC

cbindgen构建状态 最新版本 Api Rustdoc Rust

在此处阅读完整用户文档!

cbindgen为公开C API的Rust库创建C/C++11头文件。

虽然您可以手动完成此操作,但这并不是您时间的最佳利用方式。此外,与基于您实际Rust代码的机器生成头文件相比,它更有可能出现错误。cbindgen的开发人员还与Rust的开发人员紧密合作,以确保我们生成的头文件反映了Rust的类型布局和ABI的实际保证。

C++头文件很好,因为我们可以使用运算符重载、构造函数、枚举类和模板来使API更易于使用,更接近Rust。C头文件很好,因为您可以更有信心,与您交互的人可以处理它们。使用cbindgen 您无需选择!您可以只告诉它从同一个Rust库中生成两者。

使用cbindgen有两种方式:作为一个独立的程序,或者作为一个库(可能在您的build.rs中)。实际上并没有太大的差异,因为cbindgen是一个简单的Rust库,没有有趣的依赖项。

将其作为程序使用意味着构建您软件的人需要安装它。将其用于库中意味着人们可能需要更频繁地构建 cbindgen(例如,每次他们更新 rust 编译器时)。

值得注意的是,cbindgen 的开发在很大程度上是临时的,因为功能是为了支持维护者的用例而添加的。这意味着 cbindgen 可能会随机地无法支持某些特定情况,仅仅是因为还没有人为此付出努力。 如果您遇到这种情况,请提交一个问题。虽然我们都有其他工作要做,您可能也需要进行实现工作 :)

快速入门

要安装 cbindgen,只需运行

cargo install --force cbindgen

(--force 只会在已安装的情况下更新到最新版本的 cbindgen)

或者使用 Homebrew,运行

brew install cbindgen

要使用 cbindgen,您需要两样东西

  • 一个配置(cbindgen.toml,可以从空开始)
  • 一个具有公共 C API 的 Rustcrate

然后您只需运行它即可

cbindgen --config cbindgen.toml --crate my_rust_library --output my_header.h

这将为 C++ 生成一个头文件。对于 C,请添加 --lang c 开关。

有关更多选项,请参阅 cbindgen --help

在此处阅读完整用户文档!

在此处获取模板 cbindgen.toml。

示例

我们目前没有漂亮的定制示例应用程序,但 测试 中包含了许多我们功能的有意思的示例。

您可能还对浏览使用 cbindgen 的生产项目感兴趣

如果您正在使用 cbindgen 并且希望被添加到这个列表中,请打开一个拉取请求!

版本发布

cbindgen 没有固定的发布日历,如果您需要在主干分支中修复某些内容并需要发布,请提交一个请求发布的 issue。向 @emilio 发送消息以增加效果。

依赖关系

~4–14MB
~181K SLoC