当我try 构建Cargo 时,我面临着这个问题:

错误:同一软件包的多个版本正在链接本机库openssl,但只能链接一次;try 更新或固定依赖项,以确保此包只显示一次

openssl-sys v0.6.7

openssl-sys v0.7.13

Cargo 和 rust 蚀版本:

$ cargo --version
cargo 0.11.0-nightly (3ff108a 2016-05-24)

$ rustc --version
rustc 1.11.0-nightly (7746a334d 2016-05-28)

文件夹:

  • 一百

  • 一百

我不明白为什么不能编译,以及如何解决这个问题.

推荐答案

按照链接的工作方式,只能链接本机库的一个版本,否则最终会出现重复符号.Cargo's links manifest key有助于防止意外链接到同一组符号两次.

要解决这个问题,你需要通读你的Cargo.lock(这不是一个难以理解的文件格式).找到那些有违规库作为依赖项的 crate ,并注意哪些 crate 有冲突的版本.

然后必须手动解析your个依赖项,以便their个依赖项使用相同版本的本机库.


在这种情况下,依赖链的重要方面包括:

server (0.0.1) => cookie (0.2.4) => openssl (0.7.13)
               => hyper (0.6.16) => cookie (0.1.21) => openssl (0.6.7)

要修复它,请修改Cargo.toml以使用与hyper相同版本的cookie.然后您将隐式获得相同版本的openssl.

老实说,这是目前 rust 病最严重的部位之一.至少this个版本的"同一 crate 的多个不同版本"奇怪性提供了一个直接的Cargo 错误.

Rust相关问答推荐

为什么要在WASM库中查看Rust函数需要`#[no_mangle]`?

在Rust中,有没有一种方法让我定义两个 struct ,其中两个都遵循标准 struct ?

什么是Rust惯用的方式来使特征向量具有单个向量项的别名?

如何格式化传入Rust中mysql crate的Pool::new的字符串

为什么基于高山Linux的Docker镜像不能在绝对路径下找到要执行的命令?

避免在Collect()上进行涡鱼类型的涂抹,以产生<;Vec<;_>;,_>;

当发送方分配给静态时,Tokio MPSC关闭通道

在Rust内联程序集中使用字符串常量

为什么rustc会自动降级其版本?

如何将生存期参数添加到框<>;具有dyn类型别名

在 Rust 中,在需要引用 self 的 struct 体方法中使用闭包作为 while 循环条件

Rust 中的复合 `HashSet` 操作或如何在 Rust 中获得 `HashSet` 的显式差异/并集

打印 `format_args!` 时borrow 时临时值丢失

使用 rust 在 google cloud run (docker) 中访问环境变量的适当方法

判断对象是 PyDatetime 还是 Pydate 的实例?

如何使用 rust bindgen 生成的 std_vector

Rust:如果我知道只有一个实例,那么将可变borrow 转换为指针并返回(以安抚borrow 判断器)是否安全?

在传输不可复制的值时实现就地枚举修改

如何迭代调用可能会失败的函数?操作员?

Rust:为什么在 struct 中borrow 引用会borrow 整个 struct?