QSslSocket: не может вызвать неразрешенную функцию

Я использую Qt 5.7.1 (MSVC 2015, 32 bit) с Qt Creator 4.2.0. У меня проблема с QSslSocket, Я получаю следующие ошибки:

qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error

Я пошел в следующее место OpenSSL GitHub и скачал почтовый файл. Я переместил файлы «libeay32.dll» и «ssleay32.dll» в каталог выпуска, и все еще получаю эти ошибки. Есть ли кто-нибудь, кто получил QSslSocket работа, которая может дать мне шаги, чтобы заставить работать сокет или есть какие-либо предложения?

9

Решение

Вам нужно добавить поддержку OppenSSL вручную, так как Android прекратил поддержку, и я использую QT 5.9, и он не делает это для вас.
так что ваша миссия по созданию openSSL lib

Вы можете скачать его прямо здесь
https://wiki.openssl.org/index.php/Binaries

или здесь https://indy.fulgan.com/SSL/

а затем скопировать эти поля и включить их в свой проект

libcrypto.so
libssl.so

Это должно работать правильно

Или вы можете создать свой libcrypto.so а также libssl.so используя этот скрипт
просто следуйте за ним шаг за шагом
https://github.com/ekke/android-openssl-qt

2

Другие решения

Я попал сюда через Google. В моем случае я получил эту ошибку на случайных машинах потому что они пропустили правильные версии libeay32.dll а также ssleay32.dll, Это «случайно», потому что некоторые компьютеры загружены в PATH от другого программного обеспечения, а некоторые нет.

Я исправил это для Qt Creator, добавив DLL в bin папку моей установки Qt, и я исправил это в дистрибутивах, включив вышеупомянутые библиотеки DLL в свой дистрибутив.

Библиотеки DLL должны быть такими же или похожими на версию OpenSSL, с которой вначале была скомпилирована Qt. Если вы не скомпилировали его самостоятельно, начиная с Qt 5.4, вы можете запросить это с помощью QSslSocket::sslLibraryBuildVersionString(). (Кредит: https://stackoverflow.com/a/42297296/1666676)

Не забывайте, что ваши 64-битные приложения должны иметь 64-битную версию DLL, а 32-битные приложения должны иметь 32-битные DLL, чтобы у вас не было такой же проблемы, как этот парень.


Дополнительные примечания:

  • Начиная с Qt 5.2 вы должен используйте версию 1.0.0 или новее. 0.9.8 больше не работает. (Источник: http://doc.qt.io/qt-5/ssl.html)
  • Для моего стандартного MSVC2017x64 дистрибутива Qt 5.10.1 sslLibraryBuildVersionString() вернул «OpenSSL 1.0.2o». Я использую 1.0.2p для своих дистрибутивов.
  • DLL-библиотеки OpenSSL изменили имена на libcrypto-1_1*.dll а также libssl-1_1*.dll начиная с OpenSSL 1.1.0. Стандартные дистрибутивы Qt еще не используют их по состоянию на сентябрь 2018 года.
  • Загрузки OpenSSL GitHub находятся здесь: https://github.com/openssl/openssl/tags

Надеюсь, это поможет следующему человеку. Извините за возрождение старого поста.

6

Скопируйте эти два файла в путь: ‘C: \ Qt \ Tools (msvc / mingw) {версия} \ bin’

C:\Qt\Tools\(msvc|mingw)\opt\bin\libeay32.dll
C:\Qt\Tools\(msvc|mingw)\opt\bin\ssleay32.dll
3
По вопросам рекламы [email protected]