Развертывание qt linux - проблема с сетью OpenSSL? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу отправить заявление, которое я написал, нескольким коллегам. До сих пор я просто копировал двоичные файлы вместе со всеми библиотеками в ZIP-файл и отправлял их им. Это работало нормально.

Мои последние изменения касаются использования библиотеки Qt Network. Поэтому я включил три новых библиотечных файла в мой файл .zip:

  • libQt5Network.so.5
  • libQt5Network.so.5.11
  • libQt5Network.so.5.11.1

Приложение запускается и запускается, но в определенный момент ожидается загрузка нескольких файлов из Интернета. К сожалению, некоторые загрузки не удаются. Можно загружать файлы с серверов FTP, но не с https.

Я предполагаю, что это может быть связано с отсутствием OpenSSL, но я не уверен. Когда я начал использовать библиотеку Qt Network, я помню, что у меня были проблемы с загрузкой ее из https, и проблемы были связаны с OpenSSL.

Вместо загрузки файлов я получаю следующее сообщение об ошибке:

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
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
We got a connection error when networkLayerState is Unknown
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
...

Сообщение об ошибке явно относится к библиотеке SSL.

Имейте в виду, что я не верю, что у моего кода есть проблемы, так как он работает на моем компьютере. Поэтому я не публикую здесь код. Я думаю, это связано со способом развертывания кода и отсутствием некоторых библиотек? Что я могу сделать?

Я попытался запустить ldd на исполняемом файле и на libQt5Network.so.5, но в нем ничего не указано о OpenSSL.

Пожалуйста, учтите, что я не специалист по компьютерам, я просто ученый, который хочет как можно проще распространять свое программное обеспечение среди коллег.

1 Ответ

1 голос
/ 09 апреля 2020

Вы правы насчет проблемы здесь - QNetwork нужен OpenSSL для работы

Итак, вам нужно выяснить несколько вещей, чтобы обеспечить библиотеки OpenSSL

  1. По умолчанию Linux ссылки на библиотеки, установленные в системе. Итак, целевая система должна иметь библиотеки QT и OpenSSL с точно такими же версиями, как у вас. В большинстве случаев это ужасное решение, потому что вы не можете гарантировать, что библиотеки не обновятся

  2. Вы можете помочь Linux найти библиотеки с помощью переменной среды LD_LIBRARY_PATH. С помощью этого метода вы можете отправлять необходимые библиотеки с исполняемым файлом и указывать на них с помощью LD_LIBRARY_PATH. Вам понадобится сценарий оболочки для комфортного запуска приложения. Подробнее об этом методе и примерах вы можете найти в QT docs

  3. Пакет, который вы используете с библиотеками. Вы можете использовать дистрибутив нативных форматов менеджера пакетов. Информацию о создании пакетов DEB и RPM можно найти в QT wiki . Или вы можете использовать универсальный формат AppImage. С linuxdeployqt это становится довольно просто, и оно работает в любом дистрибутиве, что делает его моим любимым выбором

Все, что было указано ранее, предназначено для приложений, использующих Dynami c ссылки на библиотеки, которые по умолчанию используются для создания приложений. Для приложения Stati c оно вам не понадобится, поскольку в вашем исполняемом файле уже есть все статически связанные библиотеки ( QT docs )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...