gpt4 book ai didi

rust - 相同代码 : spurious compile time errors? 的 cargo 构建

转载 作者:行者123 更新时间:2023-11-29 07:55:17 25 4
gpt4 key购买 nike

我有 crate A 依赖于 BB 依赖于 rust-nmea crate 。

如果我构建 crate A,我在构建 rust-nmea 期间遇到了一堆错误(所有错误都错过了 use std::error::Error;)依赖:

error[E0599]: no method named `description` found for type `nom::Err<&[u8]>` in the current scope
--> /home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/src/parse.rs:100:44
|
100 | IError::Error(e) => e.description().to_string(),
| ^^^^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a `use` for it:
candidate #1: `use std::error::Error;`

但是,如果我转到 B crate 的源代码树并运行 cargo build,所有构建都没有任何错误(如果你跟着我 A 依赖 BB 依赖 rust-nmea ),

如果转到 /home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/(见编译错误)并运行 cargo build 然后一切都很好。

A 的 cargo 树显示:

│   ├── chrono v0.4.0
│ │ ├── num v0.1.40
│ │ │ ├── num-integer v0.1.35
│ │ │ │ └── num-traits v0.1.40
│ │ │ ├── num-iter v0.1.34
│ │ │ │ ├── num-integer v0.1.35 (*)
│ │ │ │ └── num-traits v0.1.40 (*)
│ │ │ └── num-traits v0.1.40 (*)
│ │ └── time v0.1.38
│ │ └── libc v0.2.27
├── nmea v0.0.6
│ ├── chrono v0.4.0 (*)
│ └── nom v3.2.0
│ └── memchr v1.0.1 (*)

并由 cargo 缓存 rust-nmea :

├── chrono v0.4.0
│ ├── num v0.1.40
│ │ ├── num-integer v0.1.35
│ │ │ └── num-traits v0.1.40
│ │ ├── num-iter v0.1.34
│ │ │ ├── num-integer v0.1.35 (*)
│ │ │ └── num-traits v0.1.40 (*)
│ │ └── num-traits v0.1.40 (*)
│ └── time v0.1.38
│ └── libc v0.2.27
└── nom v3.2.0
└── memchr v1.0.1
└── libc v0.2.27 (*)

因此无论是好的还是坏的情况都使用相同的依赖关系。

如果运行 cargo build -v -j1,两种情况下我都会得到 rustc 命令行。

好的和坏的情况的唯一区别是这部分:

-L dependency=/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/target/debug/deps --extern chrono=/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/target/debug/deps/libchrono-8e9e54e691d9b988.rlib --extern nom=/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/target/debug/deps/libnom-b72336f662b090c1.rlib

坏情况有不同的库路径和 libnom-e2ec53418967eac0.rlib 而不是 libnom-b72336f662b090c1.rlib,而 libchrono-8e9e54e691d9b988.rlib 匹配。

crate AB 是封闭源代码,我无法将问题简化为更简单的情况。 nom AB 中未使用的箱子,除非通过 rust-nmea . rust-nmea用法很简单,就是Cargo.toml中的nmea = 0.0.6。没有旗帜之类的东西。

知道为什么用相同的标志创建依赖项(根本没有标志)可能产生或不产生语法错误?

最佳答案

我找到了问题的根源,crate Acexpr 有二级依赖关系,cexprCargo.toml 中有 nom = {version = "^3", features = ["verbose-errors"] } rust-nmea 也依赖于 nom,所以我们有编译时错误。

关于rust - 相同代码 : spurious compile time errors? 的 cargo 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45281538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com