2016-05-29 50 views
11

sto affrontando questo problema quando provo a carico di compilazione:errore: libreria nativa `openssl` viene collegata a da più di una versione dello stesso pacchetto

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 e la ruggine versioni:

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

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

Files:

non può ottenere perché questo non compila e come risolvere questo problema. Grazie!

risposta

8

Il modo in cui funziona il collegamento, è possibile avere una sola versione di una libreria nativa collegata, altrimenti si ottengono simboli duplicati. Cargo's links manifest key aiuta a prevenire il collegamento accidentale allo stesso set di simboli due volte.

Per risolvere il problema, è necessario leggere il codice Cargo.lock (non è un formato di file difficile da comprendere). Trova le casse che hanno la libreria incriminata come dipendenza e nota quali hanno versioni in conflitto.

poi si deve risolvere manualmente tuoi dipendenze in modo che i loro dipendenze utilizzano la stessa versione della libreria nativa.


In questo caso, gli aspetti importanti della catena di dipendenza sono:

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

per risolvere il problema, modificare il vostro Cargo.toml di utilizzare la stessa versione di cookie come iper. Quindi otterrai implicitamente la stessa versione di openssl.

Per essere onesti, questa è una delle parti più difficili di Rust al momento. Almeno questa versione di "multiple different versions of same crate" della versione fornisce un errore Cargo diretto.

+2

Ho appena inviato una [richiesta pull] (https://github.com/kbknapp/cargo-graph/pull/29) al grafico del carico per aiutare a visualizzare questo tipo di problemi di dipendenza. –

+0

Grazie, l'ho fatto con tutte le mie dipendenze per essere "allineato" nella stessa versione. È stato un sacco di lavoro oscuro, spero che faranno qualcosa al riguardo. – mgul

+0

Cosa faccio se ho una libreria che richiede assolutamente un openssl aggiornato? Sto cercando di usare hyper e git2 allo stesso tempo e non riesco a costruirlo ora a causa di hyper che richiedono una versione precedente di openssl. La dipendenza per hyper è opzionale, però. C'è un modo per forzare il carico ad usare la versione richiesta da git2 e trattare iper come se non fosse presente nessun openssl? – Machisuji