错误:本机库`openssl`由同一个包的多个版本链接

mgu*_*gul 11 openssl rust rust-cargo

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

错误:本机库openssl由同一个包的多个版本链接,但它只能链接一次; 尝试更新或固定您的依赖项以确保此程序包仅显示一次

openssl-sys v0.6.7

openssl-sys v0.7.13
Run Code Online (Sandbox Code Playgroud)

Cargo和Rust版本:

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

$ rustc --version
rustc 1.11.0-nightly (7746a334d 2016-05-28)
Run Code Online (Sandbox Code Playgroud)

文件:

无法得到为什么这不编译以及如何解决这个问题.谢谢!

She*_*ter 9

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

要解决它,您需要仔细阅读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)
Run Code Online (Sandbox Code Playgroud)

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

说实话,这是Rust目前最粗糙的部分之一.至少这个版本的"同一箱子的多个不同版本"的奇怪性提供了直接的货物错误.

  • 我刚刚向货物图提交了[pull request](https://github.com/kbknapp/cargo-graph/pull/29),以帮助可视化这种依赖性问题. (2认同)