2016-05-29 12 views
11

によってリンクされているネイティブライブラリ私はこの問題に直面している:エラー:私は貨物のビルドしようとすると、 `openssl`は、同じパッケージの複数のバージョン

error: native library openssl is being linked to by more than one version of the same package, but it can only be linked once; try updating or pinning your dependencies to ensure that this package only shows up once

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) 

ファイル:

これはコンパイルされませんし、どのようにこの問題を解決するために、なぜ取得することはできません。 ありがとうございました!

答えて

8

リンクの仕方によっては、ネイティブライブラリの1つのバージョンのみをリンクすることができます。そうでない場合は、重複するシンボルが表示されます。 Cargoのlinks manifest keyは、誤って同じシンボルに2回リンクするのを防ぎます。

これを解決するには、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を変更します。次に、同じバージョンのopensslを暗黙的に取得します。

正直言って、これは現時点でRustの最も粗い部分の1つです。少なくともこのの "同じクレートの複数の異なるバージョン"の違和感は、まっすぐな貨物エラーを提供します。

+2

この種の依存関係の問題を視覚化するために、[pull request](https://github.com/kbknapp/cargo-graph/pull/29)をcargo-graphに提出しました。 –

+0

ありがとうございました、私はすべての依存関係を同じバージョンで "整列"させるためにこれを行いました。それは暗い仕事の多くだった、彼らはそれについて何かをやることを願っています。 – mgul

+0

最新のopensslを絶対に必要とするライブラリをお持ちの場合はどうすればよいですか?私はハイパーとgit2を同時に使用しようとしており、古いバージョンのopensslを必要とするハイパーのために今構築できません。しかし、ハイパーへの依存はオプションです。貨物にgit2が必要とするバージョンを使用させ、opensslが存在しないかのようにhyperを扱うようにする方法はありますか? – Machisuji

関連する問題