【问题标题】:Stuck in compilation (substrate-node-template:make build )编译卡住(substrate-node-template:make build)
【发布时间】:2021-03-24 16:42:08
【问题描述】:

我按照教程enter link description here到这一步,

 make build
 WASM_BUILD_TOOLCHAIN=nightly-2020-10-05 cargo build --release
       Compiling node-template-runtime v2.0.0 (/home/wangliqiu2021/CLionProjects/substrate-node-template/runtime)
 Building [=====================================================> ] 857/861: node-template-runtime(build) 

货物执行了很长时间(差不多一个+小时)没有结束,好像卡住了,有谁知道原因吗?帮帮我

操作系统:Ubuntu 20.04

CPU:AMD Ryzen 7 1700 八核处理器

【问题讨论】:

  • 我猜大约有 900 个依赖项。所以大概需要这么长时间。我昨天也在做同样的事情。最终依赖项之一仅花费了大约 14-15 分钟,这似乎并不合理。不确定原因。

标签: rust rust-cargo substrate


【解决方案1】:

编译并没有卡在编译中,由于 800+ 依赖关系,它只是需要一段时间。来自@gnunicorn this github issue

Rust 目前的编译速度不是特别快,而且对前面的人来说是不透明的,在这一步(编译 node-template-runtime 时),我们实际上构建了两次项目:一次是本地的,一次是在 wasm 中。因此,在中间的某个步骤似乎什么也没发生,这可能会占用总构建时间的一半——如果另一部分占用了例如10 分钟,然后这个过程可能需要另外 10 分钟,而没有任何进程指示(除了 CPU 用力抽水)。

您正在进行发布构建 (cargo build --release) 以启用优化。出于开发目的,常规构建或仅cargo check 将大大加快。

链接的 GitHub 问题中的一些 cmets 提到运行 cargo clean 并重新构建有助于加快编译时间,因此您也可以尝试一下。

【讨论】:

  • 构建依赖1-856很快,但是卡在857很久了
  • @wangliqiu2021 是的,依赖号 857 (node-template-runtime) 的编译过程较长,如我的回答中所述
【解决方案2】:

来自您的用户名。我想你和我一样在中国。

node-template-runtime(build) 表示您正在将运行时编译为 wasm 文件。在此期间,可能需要下载(因此请尝试使用 VPN)。

下载只发生在 1.0.0 https://docs.rs/substrate-wasm-builder/1.0.0/substrate_wasm_builder/?search=


此外,wasm 编译也需要很长时间(取决于您的硬件)。

在 2016 款 MacBookPro 中,整个编译需要 30 分钟。


此外,build.rs 中可能存在错误。有时我必须运行cargo clean。如果我在node-template-runtime(build) 时中断编译。

【讨论】:

  • During this, it might need a download (so try to use a VPN). 下载什么?
  • 可能是某种类型的依赖
  • 下载 wasm 构建器
【解决方案3】:

我找到了原因。

$CARGO_HOME/config.toml:

[build]
target-dir = "target"

删除它。

【讨论】:

  • 为什么会减慢速度?我想删除它不会引起任何问题,因为“目标”无论如何都是默认值。如果您阅读了与它相关的一些问题,请在此处链接。
  • 在移动它之前,我发现目标目录是~/target。在我移动它之后,目标目录出现在项目目录下。 @米希尔
【解决方案4】:

就我而言,问题是 WASM 运行时构建期望在本地 target 目录中找到 WASM 文件。

如果构建在 target 目录中找不到本地 WASM 文件 - 它只是挂起(例如 GitHub issue)。

我不得不更改~/.cargo/config.toml 中的target-dir 设置。

您还可以使用本地环境变量覆盖全局设置:

CARGO_TARGET_DIR=target cargo build

或者您可以使用 cargo CLI 标志:

cargo build --target-dir=target

请注意,某些基于wasm-builder 的构建脚本会忽略CARGO_TARGET_DIR 环境变量(例如wasm_project.rs)。

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2014-11-12
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多