【问题标题】:Cargo fails to compile 'num'Cargo 无法编译“num”
【发布时间】:2015-12-13 19:04:21
【问题描述】:

我正在尝试在我的 Rust 项目中使用 crate 'num'(我完全是这种语言的新手),所以我的 Cargo.toml 现在是:

[package]

name = "hello_world"
version = "0.0.1"
authors = [ "Vini" ]

[dependencies]

time = "*"
num = "*"

但是当我跑步时:

cargo run

我得到这个编译错误:

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:66:16: 66:19 error: expected identifier, found keyword `mod`

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:66 use std::str::{mod, FromStr};

                                                                                           ^~~

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:80:27: 80:28 error: expected one of `(`, `+`, `::`, `;`, `<`, or `]`, found `,`

/.cargo/registry/src/github.com-0a35038f75765ae4/num-0.0.6/src/bigint.rs:80 static ZERO_VEC: [BigDigit, ..1] = [ZERO_BIG_DIGIT];
                                                                                                      ^
Could not compile `num`.

我不知道这实际上意味着什么,我是不是用错了货物?这个版本的 'num' 与 cargo 不兼容吗?

我有货运版:

cargo 0.4.0-nightly (15b497b 2015-07-08) (built 2015-07-10)

和 rust 编译器:

rustc 1.2.0 (082e47636 2015-08-03)

【问题讨论】:

  • 我已经在帖子中添加了信息,感谢您的关注!
  • 感谢@Shepmaster!再次构建 Cargo.lock 解决了这个问题,旧版本中“num”的引用确实是旧版本。

标签: compiler-errors rust rust-cargo


【解决方案1】:

简短的回答

您的 Cargo.lock 文件包含对旧版本板条箱的引用(在本例中为非常旧版本)。运行cargo update获取最新版本。

为什么

在构建代码时,您可以使用 Cargo.toml 文件将所需的版本限制传达给 Cargo。这让您可以说出“至少这个版本”或“只有这个确切的版本”或“这个版本的任何错误修复”之类的话。

Cargo 接受您的限制和当前可用的版本,并计算出适合您的最新版本集,或者告诉您是否不能。然后它将所有数据保存到 Cargo.lock 文件中。

Cargo.lock 文件会一直存在,这样库的版本就不会随你改变。您可以运行cargo update 重做该过程并获取最新版本。

如果您正在制作图书馆,那么故事就到此结束。如果您正在生成二进制文件,您应该将锁定文件签入源代码控制,因为这是您与代码的其他用户准确沟通应该使用哪些版本的方式。当您部署代码版本时,您可以确保在生产中使用与开发相同的版本。

【讨论】:

  • 小注:cargo update 更新所有 crate,cargo update -p crate 升级特定 crate,这样可能更安全。
猜你喜欢
  • 2022-09-25
  • 2022-01-20
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2022-09-13
  • 2020-01-15
  • 2016-02-02
相关资源
最近更新 更多