第一个问题: 有一个crate A,依赖于crate B,但项目同时依赖于crate A 和 crate B 的另一个版本;Rust 是如何解决该依赖问题的?
第二个问题: 有 crates A, B, C, D, E,它们各自都依赖于 crate Z 的不同版本;此时我在项目中添加这五个依赖,Rust 是如何解决该依赖问题的?
第三个问题: crate A 依赖于 crate B,crate B 依赖于 crate A(编译A需要先编译B,编译B需要先编译A),Rust 是如何解决该依赖问题的?
1
共 4 条评论, 1 页
评论区
写评论第一个问题: 有一个crate A,依赖于crate B,但项目同时依赖于crate A 和 crate B 的另一个版本;Rust 是如何解决该依赖问题的?
如果项目依赖crate B 1.1,crate A依赖crate B 1.2,cargo会用1.2代替 如果项目依赖crate B 0.6,crate A依赖 crate B 0.7,由于0.6和0.7不兼容,编译会报错
总结,cargo会寻找一个满足要求的依赖关系,否则报错
其他情况类推
已经碰到A依赖于B的版本b1、b2导致报错编译不了的问题了。没办法,最后手工改成了一个版本,不知道这种怎么自动解决
第三个问题的话A和B肯定还是要互相依赖不同版本的。
第一与第二两个问题可以合并,视为一个问题,在一个crate(lib与exe都叫crate)中,Rust依赖其他名称相同版本不同的crate可以并存,rust将它们看作不同的crate,一同连接到最终的执行文件中。这点可以通过cargo tree查看。 第三个问题,递归依赖,无法编译。一个crate不能直接或间接依赖自己。