【发布时间】:2022-08-21 16:52:07
【问题描述】:
当尝试遵循pathfinder 库的说明时,即:
cd demo/native
cargo run --release
由于编译依赖项winit 0.19.3 版,我收到错误:
error[E0308]: mismatched types
--> /Users/yairchu/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.19.3/src/platform/macos/view.rs:209:9
|
205 | extern fn has_marked_text(this: &Object, _sel: Sel) -> BOOL {
| ---- expected `bool` because of return type
...
209 | (marked_text.length() > 0) as i8
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `bool`, found `i8`
如果我尝试通过更改Cargo.toml 将使用的版本更改为最新版本(这对我来说很好):
--- a/demo/native/Cargo.toml
+++ b/demo/native/Cargo.toml
@@ -43,7 +43,7 @@ rev = "f3df871ac8c3926fe9106d86a3e51e20aa50d3cc"
[dependencies.winit]
-version = "<0.19.4" # 0.19.4 causes build errors https://github.com/rust-windowing/winit/pull/1105
+version = "0.27.2"
我仍然得到同样的错误!
有趣的是,我在 cargo 的输出中注意到了这一点:
Compiling winit v0.19.3
Compiling winit v0.27.2
它现在似乎正在构建我指定的版本和旧版本。
我迷路了。同样使用--verbose 也无助于阐明cargo 选择构建这种特定依赖关系的原因。
- 是否在一个可执行文件中使用同一库的两个版本?
- 我怎样才能知道为什么 cargo 选择构建这个库? (以便我可以将其更新为工作版本)
谢谢!锈菜鸟
【问题讨论】:
-
另一个包可能是另一个包间接需要的
-
@mousetail 我们有什么方法可以找出它需要哪个包?
-
@yairchu
cargo tree,特别是-d,它在顶部列出了所有重复的包(具有不同版本),然后显示了它们的依赖树。 -
@Masklinn 这很有帮助!
cargo tree表明该库被另一个依赖项“surfman”使用。那么我的理解是否正确,可以同时使用多个版本的库? -
“那么我的理解是正确的,可以同时使用多个版本的库吗?”是的,只要两者不互动就可以了。从 1.31 开始,通过重命名功能,您实际上可以使用不同的版本多次依赖同一个 crate。这可能很有用,例如您想使用一个版本的依赖项,但您自己的一个依赖项使用来自其他版本的类型。
标签: rust dependency-management rust-cargo