rust - 处理货物箱的依赖关系
问题描述
我是 Rust 的新手,所以如果我只是做错了事情,请原谅。
在学习这门语言的同时,我想尝试我已经在其他语言中使用过的库的不同绑定,其中包括 SDL2、SFML2、Gtk3。
令我惊讶的是,似乎没有什么是开箱即用的。它们都依赖于 C 库,而货物箱中没有这些库。在遵循自述文件并将 .lib 和 .dll 文件手动复制到正确的位置后,我设法让 SFML2 工作。我试图让 Rust 链接器在我的 vcpk 目录中查找 .lib 文件,遗憾的是没有成功。
包管理器的全部意义在于为您自动化这些事情。其他包管理器(例如用于 C# 的 NuGet)不需要您手动将其包的依赖项放在一起。
摆脱 C/C++ 的第三方库管理地狱是我仔细研究 Rust 的原因之一。
我是不是做错了什么,或者这就是 Rust/Cargo 的情况?
解决方案
Cargo 是 Rust 代码的构建管理和源包管理工具 - 它不是用于管理二进制文件或编译其他语言(如 C 或 C++)的工具。
话虽如此,它是一个非常灵活的工具,因此提供与用其他语言编写的库的绑定的 crate 可以“捆绑”它们所依赖的库。
例如,Rust-SDL2 crate 确实提供了这样的功能 - 正如其README中所说:
从 0.31 开始,这个 crate 支持一个名为“bundled”的特性,它从源代码下载 SDL2,编译它并自动链接它。
要使用它,您可以像这样将它添加到您的 Cargo.toml 中:
[dependancies]
sdl2 = { version = "0.34.0", features=["bundled"] }
并非所有此类绑定 crate 都支持绑定,尤其是如果它们绑定的库很大、很复杂、有很多自己的依赖项和/或有很多编译时配置选项。
在这些情况下,您要么需要安装预编译的二进制文件,要么自己从源代码编译它们。
推荐阅读
- python - 使用 import random python 生成不同的随机数
- database - 将数据导入 SiteFinity
- ionic-framework - 找不到错误 io.branch.referral.InstallListener 类崩溃 Ionic v5
- apache-kafka - Kafka 流应用程序在 Windows Kafka 集群故障转移中使用“exactly-once”语义卡住了重新平衡 _transation_state
- oracle - oracle数据库创建时如何配置audit_trail='db,extended'?
- google-bigquery - 如何基于两个表的连接计算 SQL 百分比,每个分配只显示一行
- python - Numpy - 用 corrsp 填充图像。我给出了 [u,v, I] 的数组
- python - 比较列表中的字符串?
- outlook - 如何在反应加载项中使用 Office.js 获取消息
- r - 如何从存储在 R 上的矩阵中的坐标中提取 3D 数组的多个值?