如何处理Rust / Cargo中的第三方静态C库依赖项?

时间:2016-06-11 23:03:27

标签: rust rust-cargo

我想在Rust项目中链接到第三方C库。它托管在github上,仅作为静态库编译。有没有办法让Cargo为我取这个依赖?我以为没有。我尝试将其添加为依赖项并获得了一个"无法找到Cargo.toml ..."错误。

作为替代方案,我想到修改我的build.rs文件以使用git2-rs包来下载库的标签,可能被指定为通过环境变量传递的标签名称。

另一种选择是在我的项目中包含C库的源代码,但我在想是否我的箱子的用户想要使用我的箱子的第三方库的不同(但兼容)版本,他们不会&能够轻松地做到这一点。

那么社区中的其他人如何处理这样的情况呢?

1 个答案:

答案 0 :(得分:7)

通常,您想要创建libfoo-sys crate。该包将有一个构建脚本,用于编译本机库并设置链接器选项。

构建脚本可以使用构建时依赖项(如cc crate)来简化下载和编译本机库的过程。

您可以使用环境变量或功能来选择本机库的来源。您可以使用用户已经安装的系统包管理器(或者可能是手工编译的版本),您可以从某个地方下载源代码,您可以将代码包含在存储库中,或者您可以使用git子模块来引用另一个git存储库,而不是实际复制代码。