我想在我的 Rust 项目中链接到第 3 方 C 库。它托管在 github 上,仅作为静态库编译。有没有办法让 Cargo 为我获取这种依赖?我认为没有。我尝试将其添加为依赖项,但出现“无法在 ... 中找到 Cargo.toml”错误。
作为替代方案,我考虑修改我的 build.rs 文件以使用 git2-rs crate 下载库的标签,可能指定为通过环境变量传递的标签名称。
另一种选择是在我的项目中包含 C 库的源代码,但我在想,如果我的 crate 的用户想要在我的 crate 中使用不同(但兼容)版本的第 3 方库,他们不会能够如此轻松地做到这一点。
那么社区中的其他人如何处理此类情况?
最佳答案
一般来说,你想创建一个libfoo-sys
crate .那个 crate 将有一个 build script编译 native 库并设置链接器选项。
构建脚本可以使用构建时依赖项,例如 cc crate使下载和编译 native 库的过程更容易。
您可以使用环境变量或功能来选择本地库的来源。你可以使用用户已经通过他们的系统包管理器安装的(或者可能是手动编译的版本),你可以从某个地方下载源代码,你可以将代码包含在存储库中,或者你可以使用 git 子模块来引用另一个 git 存储库,而不是实际复制代码。
在很多情况下,您还会使用像rust-bindgen 这样的工具。为 C 库创建“原始”Rust 绑定(bind)。
关于rust - 如何处理 Rust/Cargo 中的 3rd 方静态 C 库依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769243/