我想在Rust项目中链接到第三方C库。它托管在github上,仅作为静态库编译。有没有办法让Cargo为我取这个依赖?我以为没有。我尝试将其添加为依赖项并获得了一个"无法找到Cargo.toml ..."错误。
作为替代方案,我想到修改我的build.rs文件以使用git2-rs包来下载库的标签,可能被指定为通过环境变量传递的标签名称。
另一种选择是在我的项目中包含C库的源代码,但我在想是否我的箱子的用户想要使用我的箱子的第三方库的不同(但兼容)版本,他们不会&能够轻松地做到这一点。
那么社区中的其他人如何处理这样的情况呢?
答案 0 :(得分:7)
通常,您想要创建libfoo-sys
crate。该包将有一个构建脚本,用于编译本机库并设置链接器选项。
构建脚本可以使用构建时依赖项(如cc crate)来简化下载和编译本机库的过程。
您可以使用环境变量或功能来选择本机库的来源。您可以使用用户已经安装的系统包管理器(或者可能是手工编译的版本),您可以从某个地方下载源代码,您可以将代码包含在存储库中,或者您可以使用git子模块来引用另一个git存储库,而不是实际复制代码。