QSslSocket: не удается вызвать неразрешенную функцию
я запускаю Qt 5.7.1 (MSVC 2015, 32 бит) с 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 и загрузил zip-файл. Я переместил " libeay32.dll " и " ssleay32.dll " файлы в мой каталог выпуска, и я все еще получаю эти ошибки. Кто-нибудь получил QSslSocket
работа, которая может дать мне шаги, чтобы заставить сокет работать или есть предложения?
3 ответов
вам нужно добавить поддержку 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
скопируйте эти два файла в путь: 'C:\Qt\Tools (msvc/mingw){version}\bin'
C:\Qt\Tools\(msvc|mingw)\opt\bin\libeay32.dll
C:\Qt\Tools\(msvc|mingw)\opt\bin\ssleay32.dll
я оказался здесь через Googling вокруг. В моем случае я получал эту ошибку на случайных машинах потому что им не хватало правильных версий 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.2 o". Я использую 1.0.2 p для своих распределений. - библиотеки DLL OpenSSL изменили имена на
libcrypto-1_1*.dll
иlibssl-1_1*.dll
начиная с В OpenSSL 1.1.0. Стандартные дистрибутивы Qt еще не используют их по состоянию на сентябрь. 2018. - загрузки OpenSSL GitHub здесь:https://github.com/openssl/openssl/tags
надеюсь, это поможет следующему человеку. Извините за воскрешение старого поста.