93个版本
0.27.0 | 2024年8月10日 |
---|---|
0.26.0 | 2023年9月13日 |
0.25.0 | 2023年8月25日 |
0.24.6 |
|
0.1.19 | 2017年7月21日 |
#6 in FFI
2,133,738每月下载量
用于 196 个crate(137个直接使用)
490KB
12K SLoC
cbindgen
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 的生产项目感兴趣
如果您正在使用 cbindgen
并且希望被添加到这个列表中,请打开一个拉取请求!
版本发布
cbindgen 没有固定的发布日历,如果您需要在主干分支中修复某些内容并需要发布,请提交一个请求发布的 issue。向 @emilio
发送消息以增加效果。
依赖关系
~4–14MB
~181K SLoC