当我们拥有一组具有良好声明的头文件时,自己定义 C 库的 Rust FFI 绑定函数是毫无意义的。我们可以使用 bindgen
这种工具从 C 库的头文件生成 Rust FFI 绑定函数。然后,我们运行一些测试代码以验证其是否正常运行,并对它们进行调整,直到正确为止。
本文我们将通过一个示例,讨论如何使用 bindgen
将 C 库中的函数公开给 Rust。我们的目标是创建一个 crate 项目,其中包含一个bindings.rs
文件,该文件代表 C 库的公共 API(包括函数,结构体,枚举等),然后通过将该 crate 导入其它项目中来调用原 C 库的功能。
上一篇我们介绍了使用 bindgen 为 C 库创建 Rust FFI 绑定有两种方式:使用 bindgen
命令行和使用 build.rs
。本文我们使用build.rs
这种方式作为示例进行说明。
1. 设置 crate 项目
一般 Rust FFI 绑定的 crate 项目会包含构建和导出 C 库的 unsafe 函数, crate 的 Rust 标准命名约定为lib<XXXX>-sys
,我们本次示例,针对 C 实现的secp256k1
库生成 Rust FFI 绑定。
首先是设置Cargo.toml
,添加bindgen
作为构建时的依赖项,如下所示:
[build-dependencies]
bindge