Я использую 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
работа, которая может дать мне шаги, чтобы заставить работать сокет или есть какие-либо предложения?
Вам нужно добавить поддержку 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
Я попал сюда через 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, чтобы у вас не было такой же проблемы, как этот парень.
Дополнительные примечания:
sslLibraryBuildVersionString()
вернул «OpenSSL 1.0.2o». Я использую 1.0.2p для своих дистрибутивов.libcrypto-1_1*.dll
а также libssl-1_1*.dll
начиная с OpenSSL 1.1.0. Стандартные дистрибутивы Qt еще не используют их по состоянию на сентябрь 2018 года.Надеюсь, это поможет следующему человеку. Извините за возрождение старого поста.
Скопируйте эти два файла в путь: ‘C: \ Qt \ Tools (msvc / mingw) {версия} \ bin’
C:\Qt\Tools\(msvc|mingw)\opt\bin\libeay32.dll
C:\Qt\Tools\(msvc|mingw)\opt\bin\ssleay32.dll