1 个不稳定版本
0.26.1 | 2024 年 1 月 18 日 |
---|
#183 in FFI
470KB
12K SLoC
免责声明:这不是官方的 CBINDGEN Crate
这是在等待官方仓库合并的同时,为了解决我们项目所需的修复而尝试的一个版本。
我们仅克隆了在此处找到的官方 cbindgen 仓库: https://github.com/mozilla/cbindgen
我们添加了一个小的补丁,以修复我们项目中设置中的 C API 生成问题,其中依赖项具有与我们的主 Crate 相同的名称。由于 cargo 元数据很可能被加载在一个类似 HashMap 的结构中,因此元数据解析将随机选择错误的 Crate 进行展开/解析,此分支专门为此修复。
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的Rust包
然后你需要做的就是运行它
cbindgen --config cbindgen.toml --crate my_rust_library --output my_header.h
这将为C++生成一个头文件。对于C,添加--lang c
开关。
有关更多信息,请参阅cbindgen --help
。
示例
我们目前没有好的定制示例应用程序,但测试包含了许多关于我们功能的有趣示例。
你也可以浏览在生产中使用cbindgen的项目,可能会很有趣
如果你使用cbindgen
并希望被添加到这个列表中,请打开一个pull request!
版本发布
cbindgen没有固定的发布日历,如果主干中有需要发布的修复,请提交一个问题请求发布。向@emilio
发送消息可以增加效果。
依赖关系
~5–14MB
~182K SLoC