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 работа, который может дать мне шаги, чтобы заставить сокет работать, или есть какие-либо предложения?


person KirstenS    schedule 25.01.2017    source источник
comment
drescherjm, спасибо за быстрый ответ. Это что-то, что я указываю в файле .pro? А где мне найти .lib? У меня на локальном диске (C :) установлен OpenSSL-Win32, но нет файлов .lib.   -  person KirstenS    schedule 25.01.2017
comment
Возможный дубликат неразрешенных функций при работе с QSslSocket   -  person drescherjm    schedule 25.01.2017
comment
Извините, я подумал, что это ошибка компоновщика, а не ошибка времени выполнения. Я считаю, что это сообщение связано с использованием плагина в Qt.   -  person drescherjm    schedule 25.01.2017
comment
Хорошо, спасибо за помощь. Есть ли у вас предложения по исправлению ошибок времени выполнения? Я просмотрел предыдущую тему «Неразрешенные функции» ... но я считаю, что попробовал решение, которое они предложили (копирование библиотек DLL в папку выпуска), и это не сработало. Какие-либо предложения? Спасибо!   -  person KirstenS    schedule 25.01.2017
comment
Вы добавили QT += network в свой профи?   -  person drescherjm    schedule 25.01.2017
comment
да, у меня это есть в моем файле .pro   -  person KirstenS    schedule 25.01.2017
comment
Это может показаться базовым, но выполняете ли вы конфигурацию выпуска? Я имею в виду, что если вы выполняете конфигурацию отладки, вам также следует скопировать библиотеки DLL в каталог отладки. С другой стороны, используете ли вы ту же версию библиотек OpenSSL, для которой был скомпилирован ваш дистрибутив Qt?   -  person cbuchart    schedule 17.02.2017
comment
тебе удалось это решить? у меня такая же проблема   -  person mohammad alabid    schedule 04.06.2017


Ответы (5)


Вам нужно добавить поддержку 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

person mohammad alabid    schedule 04.06.2017
comment
Сетевые запросы https отлично работают в приложении Qt Android 4.4. @mohammad alabid, вы знаете, когда Android прекратил поддержку? Android ›= 6.0? На Android 7.0 то же приложение Qt не работает qt.network.ssl: QSslSocket: не может вызвать неразрешенную функцию SSL_CTX_ctrl, хотя я вижу оба ib.libcrypto.so и libssl.so в Android / system / lib / каталог? - person Ed of the Mountain; 18.07.2018
comment
Да, поддержка SSlSockets в Android упала. Вы пробовали создавать файлы .so? вы можете попробовать эти файлы dropbox.com/s/w6cm09niyj185fb/openSSL.zip ? dl = 0 - добавьте эти 3 файла рядом с файлом .pro - и добавьте эту строку в свой файл .pro include (android-openssl.pri) - person mohammad alabid; 19.07.2018

Я попал сюда через поиск в 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, поэтому у вас не возникнет такой же проблемы, как у этот парень.


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

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

person Phlucious    schedule 14.09.2017
comment
Конечно, вы должны убедиться, что вы упаковываете те же библиотеки DLL, что и версия OpenSSL, с которой изначально был скомпилирован Qt. Как мне это сделать? - person sitting-duck; 19.09.2018
comment
Хороший вопрос! Я нашел намек на это здесь и здесь. Короче говоря, используйте QSslSocket::sslLibraryBuildVersionString(). Я добавлю это к своему ответу. - person Phlucious; 19.09.2018

Скопируйте эти два файла по пути: '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
person Hamed Nikzad    schedule 28.10.2017
comment
Не уверен, что это была проблема с MSVC, но определенно была с MinGW :) - person Chris Browet; 29.01.2019

Объединив здесь существующие ответы и некоторые исследования, мне удалось заставить его работать с компилятором MSVC2017 x64:

  1. Загрузите версию 1.0 (Win64 OpenSSL v1.0.2r Light) отсюда: https://slproweb.com/products/Win32OpenSSL.html
  2. При установке выберите копирование DLL в каталог bin OpenSSL.
  3. Затем скопируйте libeay32.dll и ssleay32.dll из папки bin OpenSSL в: {Your_Qt_Folder}/{Qt_version}/msvc2017_64/bin
person max paint    schedule 15.04.2019

Я решил эту проблему.

  1. Загрузите и установите v1.0.2s ‹< - (_ 1_, ssleay32.dll) по адресу https://slproweb.com/products/Win32OpenSSL.html

  2. Скопируйте libeay32.dll и ssleay32.dll

  3. Найдите QtNetwork*.dll в папке Qt. В моем случае путь C:\Qt\Tools\QtCreator\bin.

  4. Вставьте libeay32.dll и ssleay32.dll в C:\Qt\Tools\QtCreator\bin.

person 김민준    schedule 02.07.2019