有没有办法用 Cargo 创建 C 库?

Is there a way to create C library with Cargo?

我需要创建一个(静态)C 库来绑定到现有的板条箱。 Cargo 有什么方法可以为我创建这个 C 库吗?

我有一个 crate(例如 html5ever),我希望 Cargo 为那个 crate 创建一个基于 C-API 的 C 库。

Is there any way Cargo can create this C library for me?

Cargo 目前没有这个功能。

I have a crate (e.g. html5ever), and I want Cargo to create a C library based on C-API for that crate.

它在 C 中是有原因的吗? C 可以直接调用 Rust 代码,你可以直接使用 html5ever

解决这个问题的一种方法是创建一个特殊的板条箱来存储您的 C API。例如,如果您的库名为 foo,那么在您的主目录中,除了 src/tests 之外还有另一个名为 capi 的文件夹,它将存储一个特殊的箱子 foo_capi 为 C API.

  foo
   |
   +--src
   | 
   +--test
   |
   +--capi
        | 
        +--include 
        |
        +--src 
        |
        Cargo.toml

include 文件夹包含 C 的头文件。

src 包含导出到 C 中的 Rust 文件。

Cargo 清单应该是静态链接的并且依赖于项目 foo。例如,查看 html5ever 中使用的 Cargo.toml

我想,cargo-c 正是您要找的:

It produces and installs a correct pkg-config file, a static library and a dynamic library, and a C header to be used by any C (and C-compatible) software.