【发布时间】:2015-06-05 01:03:23
【问题描述】:
我需要创建一个绑定到现有 crate 的(静态)C 库。 Cargo 有什么方法可以为我创建这个 C 库吗?
我有一个 crate(例如 html5ever),我希望 Cargo 为该 crate 创建一个基于 C-API 的 C 库。
【问题讨论】:
标签: static-libraries rust rust-cargo c-api
我需要创建一个绑定到现有 crate 的(静态)C 库。 Cargo 有什么方法可以为我创建这个 C 库吗?
我有一个 crate(例如 html5ever),我希望 Cargo 为该 crate 创建一个基于 C-API 的 C 库。
【问题讨论】:
标签: static-libraries rust rust-cargo c-api
Cargo 有什么方法可以为我创建这个 C 库吗?
Cargo 目前没有此功能。
我有一个 crate(例如 html5ever),我希望 Cargo 为该 crate 创建一个基于 C-API 的 C 库。
它在 C 中是有原因的吗? C 可以直接调用 Rust 代码,你可以直接使用 html5ever,因为它存在。
【讨论】:
解决此问题的一种方法是创建一个特殊的 crate 来存储您的 C API。例如,如果您的库名为 foo,那么在您的主目录中,在 src/tests 旁边还有一个名为 capi 的文件夹,它将为 C API 存储一个特殊的 crate foo_capi。
foo
|
+--src
|
+--test
|
+--capi
|
+--include
|
+--src
|
Cargo.toml
include 文件夹包含 C 的头文件。
src 包含导出到 C 中的 Rust 文件。
Cargo 清单应该是静态链接的,并且依赖于项目 foo。例如查看 html5ever 中使用的 Cargo.toml。
【讨论】: