错误:同一软件包的多个版本正在链接本机库“openssl”

错误:同一软件包的多个版本正在链接本机库“openssl”,openssl,rust,rust-cargo,Openssl,Rust,Rust Cargo,当我尝试构建货物时,我面临着这个问题: 错误:同一软件包的多个版本正在链接本机库openssl,但只能链接一次;尝试更新或固定依赖项,以确保此包只显示一次 openssl-sys v0.6.7 openssl-sys v0.7.13 货物和锈蚀版本: $ cargo --version cargo 0.11.0-nightly (3ff108a 2016-05-24) $ rustc --version rustc 1.11.0-nightly (7746a334d 2016-05-28)

当我尝试构建货物时,我面临着这个问题:

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

openssl-sys v0.6.7

openssl-sys v0.7.13
货物和锈蚀版本:

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

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

我不明白为什么这个不能编译,以及如何解决这个问题。
谢谢大家!

按照链接的工作方式,只能链接本机库的一个版本,否则会导致重复符号。Cargo有助于防止意外链接到同一组符号两次

要解决此问题,您需要通读您的
Cargo.lock
(这不是一种难以理解的文件格式)。找到包含违规库作为依赖项的板条箱,并注意哪些板条箱具有冲突的版本

然后,您必须手动解析依赖项,以便它们的依赖项使用相同版本的本机库


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

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


老实说,这是目前锈蚀最严重的部位之一。至少这个版本的“同一板条箱的多个不同版本”奇怪性提供了一个直接的货物错误。

我刚刚提交了一个到货物图,以帮助可视化这种依赖性问题。谢谢,我这样做是为了在同一版本中“对齐”所有依赖性。这是一个黑暗的工作很多,希望他们能做些什么。如果我有一个库,绝对需要一个最新的openssl,我该怎么办?我正在尝试同时使用hyper和git2,但由于hyper需要旧版本的openssl,所以现在无法构建它。不过,hyper的依赖项是可选的。有没有办法强迫cargo使用git2所需的版本,并将hyper视为不存在openssl?@Machisuji最好作为单独的问题提问。但是,如果您不需要,可以使用Cargo功能禁用Hyper的OpenSSL依赖项。谢谢!我提出了一个单独的问题: