Не удалось найти openssl в бэкэнде - PullRequest
0 голосов
/ 18 октября 2019

Ошибка, которую я получаю:

error[E0433]: failed to resolve: could not find `openssl` in `backend`
  --> ...\src\...\swagger-0.12.1\src\connector.rs:41:34
   |
41 |             native_tls::backend::openssl::TlsConnectorBuilderExt::from_openssl(ssl);
   |                                  ^^^^^^^ could not find `openssl` in `backend`

error[E0433]: failed to resolve: could not find `openssl` in `backend`
  --> ...\swagger-0.12.1\src\connector.rs:85:34
   |
85 |             native_tls::backend::openssl::TlsConnectorBuilderExt::from_openssl(ssl);
   |                                  ^^^^^^^ could not find `openssl` in `backend`

   Compiling hyper v0.2.1
error: expected identifier, found `"rustc-serialize"`
   --> ...\hyper-0.2.1\src\lib.rs:129:14
    |
129 | extern crate "rustc-serialize" as serialize;
    |              ^^^^^^^^^^^^^^^^^ expected identifier

Сгенерирован серверный стаб пользователя. Возникли проблемы, когда груз не мог найти openssl, выдавая ошибку вроде «custom build что-то openssl-sys 0.9.24». Это была известная проблема, и я преодолел ее, загрузив vcpkg и используя vcpkg для загрузки openssl. Затем используя переменные окружения, чтобы указать папку загрузки, чтобы груз мог использовать openssl. Но теперь, похоже, ошибка в том, что openssl не существует в backend?

Это также кажется специфичным для окон, какие-либо идеи?

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

1 Ответ

1 голос
/ 18 октября 2019

Вы попали в изъян инструментов документации Rust;он получает то, что находится в пакете, но не показывает ограничения.

Определение модуля backend определяется как:

#[cfg(any(target_os = "macos", target_os = "ios"))]
pub mod security_framework;

#[cfg(target_os = "windows")]
pub mod schannel;

#[cfg(not(any(target_os = "macos", target_os = "windows", target_os = "ios")))]
pub mod openssl;

Другими словами, ситуацияследующее:

  • Если вы используете Linux (то есть не MacOS, не Windows, не iOS), тогда openssl доступно
  • Если вы используете Windows, тогда schannelдоступно
  • Если вы работаете на MacOS или iOS security_framework доступно

Однако вы не должны пытаться нацеливаться на определенный бэкэнд, так как это наносит ущерб целибиблиотека. Вместо того, чтобы импортировать native_tls::backend::openssl::TlsConnectorBuilderExt, импортируйте native_tls::TlsConnectorBuilder и позвольте ему решить, какой бэкэнд вам нужен.

Это может быть легче сказать, чем сделать, однако, так как из-за вашей ошибки это вызвано третьейпартийная библиотека, которая указывает, что она была протестирована только на Linux.

...