2015-02-12 14 views
5

Pytanie: Jak mogę obejść (lub naprawić) sytuację, w której dwie zależności od kopalni łączą się z tą samą biblioteką, ale tej biblioteki nie można połączyć dwukrotnie? Wydaje się, że jest to coś, co zwykle można rozwiązać za pomocą wspólnej biblioteki, ale nie jestem pewien, jak podejść do niej z Rustem.Jak mogę zapobiec łączeniu z tą samą biblioteką macierzystą przez wiele zależności?

Szczegóły:

Robię aplikację w Rust pomocą Nickel framework i rust-postgres w bazie danych. I pojawia się następujący błąd podczas budowania:

> cargo build 
native library `openssl` is being linked to by more than one package, and can only be linked to by one package 

    openssl-sys v0.3.3 (https://github.com/sfackler/rust-openssl.git#ee66da60) 
    openssl-sys v0.3.3 

Przeglądając Cargo.lock, openssl odwołuje http (co jest zależność niklu) i rdzy postgres.

My Cargo.toml wygląda następująco:

[package] 

name = "goodoldweb" 
version = "0.0.1" 
authors = ["..."] 

[dependencies.nickel] 
git="https://github.com/nickel-org/nickel.rs.git" 

[dependencies.postgres] 
git="https://github.com/sfackler/rust-postgres.git" 

Oto pełna Cargo.lock:

[root] 
name = "goodoldweb" 
version = "0.0.1" 
dependencies = [ 
"nickel 0.1.0 (git+https://github.com/nickel-org/nickel.rs.git)", 
"postgres 0.6.1 (git+https://github.com/sfackler/rust-postgres.git)", 
] 

[[package]] 
name = "byteorder" 
version = "0.2.4" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "gcc" 
version = "0.1.7" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "groupable" 
version = "0.1.0" 
source = "git+https://github.com/nickel-org/groupable-rs#efc8d769f611558f086322cd8d2d5ff53314e435" 

[[package]] 
name = "http" 
version = "0.1.0-pre" 
source = "git+https://github.com/nickel-org/rust-http.git#1997192b7662ee5bf3bf381bfd9e2aa70f85a545" 
dependencies = [ 
"openssl 0.3.3 (git+https://github.com/sfackler/rust-openssl.git)", 
"time 0.1.17 (git+https://github.com/rust-lang/time)", 
"url 0.2.18 (git+https://github.com/nickel-org/rust-url.git)", 
] 

[[package]] 
name = "libc" 
version = "0.1.2" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "libressl-pnacl-sys" 
version = "2.1.4" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"pnacl-build-helper 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "log" 
version = "0.2.3" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "matches" 
version = "0.1.2" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "nickel" 
version = "0.1.0" 
source = "git+https://github.com/nickel-org/nickel.rs.git#8c2e6a9bdbce0a3ec53d559b86f5060ee1ea6c29" 
dependencies = [ 
"groupable 0.1.0 (git+https://github.com/nickel-org/groupable-rs)", 
"http 0.1.0-pre (git+https://github.com/nickel-org/rust-http.git)", 
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 
"nickel_macros 0.0.1 (git+https://github.com/nickel-org/nickel.rs.git)", 
"plugin 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 
"regex 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 
"regex_macros 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 
"rust-mustache 0.3.0 (git+https://github.com/nickel-org/rust-mustache.git)", 
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", 
"time 0.1.17 (git+https://github.com/rust-lang/time)", 
"typemap 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)", 
"url 0.2.18 (git+https://github.com/nickel-org/rust-url.git)", 
] 

[[package]] 
name = "nickel_macros" 
version = "0.0.1" 
source = "git+https://github.com/nickel-org/nickel.rs.git#8c2e6a9bdbce0a3ec53d559b86f5060ee1ea6c29" 

[[package]] 
name = "openssl" 
version = "0.3.3" 
source = "git+https://github.com/sfackler/rust-openssl.git#ee66da6060c57bc86906261ee3d684fac1fd05e4" 
dependencies = [ 
"openssl-sys 0.3.3 (git+https://github.com/sfackler/rust-openssl.git)", 
] 

[[package]] 
name = "openssl" 
version = "0.3.3" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"openssl-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "openssl-sys" 
version = "0.3.3" 
source = "git+https://github.com/sfackler/rust-openssl.git#ee66da6060c57bc86906261ee3d684fac1fd05e4" 
dependencies = [ 
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 
"libressl-pnacl-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 
"pkg-config 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "openssl-sys" 
version = "0.3.3" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 
"libressl-pnacl-sys 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 
"pkg-config 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "phantom" 
version = "0.0.3" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "phf" 
version = "0.6.6" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"phf_shared 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "phf_macros" 
version = "0.6.6" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"phf_shared 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 
"rand 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "phf_shared" 
version = "0.6.6" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "pkg-config" 
version = "0.2.0" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "plugin" 
version = "0.2.1" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"typemap 0.0.8 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "pnacl-build-helper" 
version = "1.3.2" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "postgres" 
version = "0.6.1" 
source = "git+https://github.com/sfackler/rust-postgres.git#fe6ae0c63a6e5d66d2afb785605b7d89ec47062d" 
dependencies = [ 
"byteorder 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 
"openssl 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 
"phf 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 
"phf_macros 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", 
"time 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "rand" 
version = "0.1.2" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"libc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "regex" 
version = "0.1.14" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "regex_macros" 
version = "0.1.8" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"regex 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "rust-mustache" 
version = "0.3.0" 
source = "git+https://github.com/nickel-org/rust-mustache.git#58ed857c88f8e5230913c382034601f37141b4ee" 
dependencies = [ 
"log 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "rustc-serialize" 
version = "0.2.12" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "time" 
version = "0.1.17" 
source = "git+https://github.com/rust-lang/time#0960d5e21b332088b04f62117514b0a02fd31259" 
dependencies = [ 
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 
"libc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "time" 
version = "0.1.17" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"gcc 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 
"libc 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "typemap" 
version = "0.0.8" 
source = "registry+https://github.com/rust-lang/crates.io-index" 
dependencies = [ 
"phantom 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 
"unsafe-any 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 
] 

[[package]] 
name = "unsafe-any" 
version = "0.2.2" 
source = "registry+https://github.com/rust-lang/crates.io-index" 

[[package]] 
name = "url" 
version = "0.2.18" 
source = "git+https://github.com/nickel-org/rust-url.git#5801582b307c16f759b5fe11dec71385af86180c" 
dependencies = [ 
"matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 
"rustc-serialize 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", 
] 
+0

Czy mógłbyś opublikować swój pełny "Cargo.lock"? – huon

+0

Wygląda na to, że winowajcą jest fakt, że [rust-org's rust-http] (https://github.com/nickel-org/rust-http) (który jest zależnością od niklu) wprowadza 'sfackler/rust- openssl' zamiast "oficjalny" na crates.io. Niestety repo na rust-http nie ma włączonych problemów, ale otworzyłem jeden na głównym reporze nikiel: [# 139] (https://github.com/nickel-org/nickel.rs/issues/149) –

+0

Renato: To rozwiązanie jest dla mnie rozwiązaniem, jeśli podasz to jako odpowiedź, zaakceptuję to. Na razie może po prostu wykonam lokalny rozwidlenie http i zobaczę, czy mogę wymienić tę zależność bez generalnego remontu. – Erik

Odpowiedz

3

Wydaje się, że winowajcą jest fakt, że nickel-org's rust-http (co jest zależność niklu) przynosi sfackler/rust-openssl zamiast "oficjalnego" openssl na crates.io. Niestety, repozytorium rust-http nie ma włączonych problemów, ale otworzyłem jeden na głównym repozytorium nikiel: #139

Powiązane problemy