如何知道哪个包Rust编译失败?

问题描述 投票:0回答:1

我的

Cargo.toml
中有依赖项,由于使用了太新的语言功能而导致编译失败。

我试图通过降低依赖版本来解决这个问题,但我无法理解我需要降低哪个包的版本。这是我的

Cargo.toml
:

[package]
name = "..."
version = "0.1.0"
authors = ["..."]
edition = "2018"

[dependencies]
tokio = { version = "<0.3.0", features = ["macros", "sync"] }
warp = ">=0.0.0"
error[E0658]: `match` is not allowed in a `const fn`
   --> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/socket2-0.4.0/src/lib.rs:156:9
    |
156 | /         match address {
157 | |             SocketAddr::V4(_) => Domain::IPV4,
158 | |             SocketAddr::V6(_) => Domain::IPV6,
159 | |         }
    | |_________^
    |
    = note: for more information, see https://github.com/rust-lang/rust/issues/49146

我不明白哪个包依赖链导致了这个编译错误。为什么要编译

socket2 v0.4.0
?我不知道哪个包需要它。我想查看导致
socket2
的依赖链,以了解要降低哪个包的版本才能编译。

如果我尝试写:

socket2 = "<0.4.0"

不会阻止

cargo
构建
socket2 v0.4.0
。所以它是通过
Cargo.toml
中的某些东西的依赖链构建的。我认为没有足够简单的方法可以在实践中使用来查看完整的链条。

理想情况下,我想要一个程序能够自动尝试减少已用包的版本,直到它变得可编译。

rust dependencies rust-cargo
1个回答
2
投票

为什么要编译

socket2 v0.4.0
?我不知道哪个包需要它。我想查看导致
socket2
的依赖链,以了解要降低哪个包的版本才能编译。

这可以通过运行

cargo tree -i socket2
来看到(您可能必须在旧工具链上单独安装子命令),对我来说,它看起来像这样:

socket2 v0.4.0
└── hyper v0.14.7
    └── warp v0.3.1
        └── tests v0.1.0 (C:\Users\kmdreko\Projects\rust-tests)

您可以尝试使用

warp = "0.2"
而不是
"0.3"

© www.soinside.com 2019 - 2024. All rights reserved.