我想在Rust项目中链接一个第三方C库。它托管在github上,仅作为静态库进行编译。有什么办法让Cargo为我获取此依赖关系?我在想没有。我尝试将其添加为依赖项,并收到“在...中找不到Cargo.toml”错误。
作为替代方案,我考虑过修改build.rs文件以使用git2-rs板条箱下载该库的标签,该标签可能指定为通过环境变量传递的标签名称。
另一种选择是将C库的源代码包括在我的项目中,但是我在想如果我的板条箱的用户想要在我的板条箱中使用其他(但兼容)版本的3rd party库,他们不会能够轻松地做到这一点。
那么社区中的其他人如何处理这种情况呢?
通常,您要创建一个libfoo-sys
板条箱。该板条箱将具有一个编译脚本,该脚本可编译本机库并设置链接器选项。
构建脚本可以使用诸如cc crate之类的构建时依赖性来简化下载和编译本机库的过程。
您可以使用环境变量或功能来选择本机库的来源。您可以使用用户已经由其系统软件包管理器安装的版本(或者可能是手工编译的版本),可以从某处下载源代码,可以将代码包含在存储库中,或者可以使用git子模块进行引用另一个git仓库,而不是实际复制代码。
在许多情况下,您还将使用rust-bindgen之类的工具为C库创建“原始” Rust绑定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句