linux - 如何在离线环境下使用 Cargo 构建项目?

标签 linux macos rust

我有一台装有 OS X 系统的笔记本电脑,可以访问互联网,还有一台 Linux 服务器,出于某些安全原因无法访问互联网。

我想构建一个对 Linux 服务器有一定依赖性的 Rust 项目。由于Linux服务器不能上网,我在OSX笔记本上运行cargo build命令,将依赖源文件下载到.cargo目录下,然后将这些文件复制到Linux 服务器并将它们放入 /root/.cargo 目录。

我使文件结构相同,但是当我在 Linux 服务器上运行 cargo build 时,它仍然尝试连接到 this网站和构建失败。 cargo build 命令总是尝试连接互联网,尽管 dep 源文件已经在 .cargo 目录中。

如何在离线环境中构建具有依赖关系的 Rust 项目?为什么复制依赖的源文件不起作用?

最佳答案

好消息!从 Rust 1.37 开始,您可以使用 Cargo 自己的 vendor command下载您的 crate 的依赖项并将其捆绑在 crate 本身中:

  1. 首先,运行cargo vendor。这将在您的包的根目录中设置一个名为 vendor 的新目录。然后它将从 crates.io 和 git 下载依赖项,并将它们存储在这个新目录中。

  2. cargo vendor 下载完所有必需的依赖项后,它将打印一组您需要遵循的说明。在撰写本文时,您只需将几行复制到 .cargo/config.toml。请注意,config.toml 是相对于您的包的根目录的,而不是您的主目录中的根目录。

完成后,就依赖关系而言,您的箱子将完全独立。您可以将此方法与 Rust 的 offline installers 结合使用完全离线构建 Rust 程序。

关于linux - 如何在离线环境下使用 Cargo 构建项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267233/

相关文章:

linux - 用下划线替换目录中所有文件中的空格

linux - 如何使用 'cp' 命令排除特定目录?

macos - 获取突出显示的文本

objective-c - 在非主线程中运行 Cocoa GUI

macos - Android 模拟器错误 : Deciding if GLDirectMem/Vulkan should be enabled

iterator - 为什么 Iterator::next 返回一个选项而不是一个项目?

android - Android 有办法在 adb 中显示进程优先级吗?

linux - Linux 内核模块中的 module_init 和 init_module 有什么区别?

rust - rust 同步 channel 更新错误 'nightly --- (error reading rustc version)'

rust - 解决参数特征缺乏相关方法的问题?