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

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