Error: родная библиотека `openssl` связана более чем с одной версией одного и того же пакета

Я столкнулся с этой проблемой, когда пытаюсь построить груз:

error: родная библиотека 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)

Файлы:

не может понять, почему это не компилируется и как решить эту проблему. Спасибо!

Ответ 1

Как работает ссылка, вы можете связать только одну версию родной библиотеки, иначе вы получите дубликаты символов. 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)

Чтобы исправить это, измените свой Cargo.toml, чтобы использовать ту же самую версию cookie, что и гипер. Тогда вы неявно получите ту же версию openssl.

Честно говоря, это одна из самых грубых частей Руста на данный момент. По крайней мере, эта версия "нескольких разных версий одного и того же ящика" странности обеспечивает прямолинейную ошибку Cargo.