© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
25 мая 2018 г. 13:50

Установка OpenSSL с QT Windows

Qt, openssl, static qt

Уже неделю не могу сообразить как присоединить openssl к qt.

Инструкция установки openSSL на win.

  1. Переходим по ссылке http://slproweb.com/products/Win32OpenSSL.html
  2. Качаем не лайт версию (32 бит пробовал).
  3. Во время установки выбираем пункт: the openssl binaries (/bin) directory / sistem files
  4. После установки добавляем в переменные среды в переменную PATH : C:\OpenSSL-Win32\lib
  5. В .pro-файл проекта на QT добавляем строчку: INCLUDEPATH += C:/OpenSSL-Win32/include
  6. В main.cpp пробуем для примера написать строчку : #include <openssl/aes.h> и скомпилировать.
  7. Готово. Ф-ции видят, но при попытке компиляции вылетает ошибки : undefined reference to `AES_encrypt'
Думал собрать статический qt с вшитым openssl.
На сайте wiki.qt.io есть скрипт для PowerShell: windows-build-qt-static.ps1 . Скрипт автоматически скачивает и устанавливает QT в статической сборке. Вот только мне нужно добавить OpenSSL.
Из изменений скрипта явно нужно заменить старую ссылку скачивания на новую:
// $QtSrcUrl = "http://download.qt-project.org/official_releases/qt/5.3/5.3.0/single/qt-everywhere-opensource-src-5.3.0.7z"
// заменить на
$QtSrcUrl = "http://download.qt.io/official_releases/qt/5.11/5.11.0/single/qt-everywhere-src-5.11.0.zip"
И вопрос что сделать со сборкой тут:
cmd /c "configure.bat -static -debug-and-release -platform win32-g++ -prefix $QtDir `
    -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite`
    -no-openssl -opensource -confirm-license `
    -make libs -nomake tools -nomake examples -nomake tests"
заменить -no-openssl заменить на -openssl -I c:\OpenSSL-Win32\include -L c:\OpenSSL-Win32\lib\MinGW .
И что делать с тем что архив ожидался 7z а сейчас он zip? Что нужно сделать с openSSL до запуска скрипта? Установить в системные папки или в папки bin? или ничего не нужно делать?
  • #
  • отредактировано 25 мая 2018 г. 14:14
  • 25 мая 2018 г. 14:07

С этим openssl всё время сплошные головные боли. Дело в том, что новые версии почему-то всё ещё не поддерживаются Qt.

В результате я просто нашёл нужные версии этой библиотеки... и добавил их прямо в проект с указанием пути установки.

CONFIG(release, debug|release): openssl.path = $$OUT_PWD/release
else:CONFIG(debug, debug|release): openssl.path = $$OUT_PWD/debug
openssl.files += $$PWD/../openssl/*.dll

INSTALLS += openssl
соответственно в настройках проекта нужно добавить make arguments -> install

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

Сами нужные библиотеки можете скачать по этой ссылке

Можете подробнее рассказать что нужно сделать?

Скачал libeay32 и ssleay32.
Что дальше?
CONFIG(release, debug|release): openssl.path = $$OUT_PWD/release
else:CONFIG(debug, debug|release): openssl.path = $$OUT_PWD/debug
openssl.files += $$PWD/../openssl/*.dll

INSTALLS += openssl
Это что? Куда?
  • fryn3
  • #
  • отредактировано 25 мая 2018 г. 14:20
  • 25 мая 2018 г. 14:20

Это нужно прописывать в pro файл вашего проекта


openssl.path - указывает куда нужно установить библиотеки, это будет либо build-debug-* либо build-release-*
opensll.files - это откуда брать библиотеки

$$OUT_PWD - это каталог сборки будет
$$PWD - это каталог, где находится сам профайл проекта

INSTALLS так и оставьте

В параметрах настройки проекта нужно добавить дополнительный шаг и прописать install в make arguments
  • #
  • отредактировано 25 мая 2018 г. 14:40
  • 25 мая 2018 г. 14:37

А устанавливать в целом openssl надо отсюда: http://slproweb.com/products/Win32OpenSSL.html?

А .h файлы что с ними делать? прописывать строку: INCLUDEPATH += C:/OpenSSL-Win32/include ?
Папку openssl скинул на уровень выше чем проект.


pesokQT.pro
QT -= gui
QT += network
CONFIG += c++11 console
CONFIG -= app_bundle

DEFINES += QT_DEPRECATED_WARNINGS
Qt += network


SOURCES += main.cpp

INCLUDEPATH += C:/OpenSSL-Win32/include

#LIBS += -LC:\OpenSSL-Win32\lib\MinGW -libssl-1_1 -libcrypto-1_1


CONFIG(release, debug|release): openssl.path = $$OUT_PWD/release
else:CONFIG(debug, debug|release): openssl.path = $$OUT_PWD/debug
openssl.files += $$PWD/../openssl/*.dll

INSTALLS += openssl
main.cpp
#include<QCoreApplication>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include<QtNetwork/QNetworkReply>
#include <QEventLoop>
#include <QUrl>
#include<QFile>
#include<openssl/aes.h>

int main(int argc, char * argv[])
{
     QCoreApplication app(argc,argv);
     qDebug() << QSslSocket::supportsSsl();

     return 0;
}

output console:
false
  • fryn3
  • #
  • отредактировано 25 мая 2018 г. 14:55
  • 25 мая 2018 г. 14:54

Вам нужна эта либо, чтобы просто была поддержа SSL/HTTPS для сети?

Тогда вот это не нужно вообще

INCLUDEPATH += C:/OpenSSL-Win32/include

#LIBS += -LC:\OpenSSL-Win32\lib\MinGW -libssl-1_1 -libcrypto-1_1
И это тоже можно удалить
#include<openssl/aes.h>
В целом нужно оттуда... но что-то там сейчас не рабочие сборки для Qt, поэтому пока забудем о них.
По факту библиотеки SSL грузятся в рантайме, если  QSslSocket::supportsSsl() выдаёт false значит не совсем правильно прописали пути, куда кидать библиотеку. Она просто не нашлась.
  • #
  • 25 мая 2018 г. 15:02

QSslSocket::supportsSsl() -- эту строчка где была подсмотрена для быстрой проверки: подключен ли ssl или нет.

В целом мне нудно aes шифрование.
При попытке вызвать какую либо ф-цию из aes.h, пишет ошибку: не находит определения.

Это строчка вернёт true только в том случае, если прогрузились библиотеки OpenSSL, для проверки киньте библиотеки вручную в build папку где исполняемый файл собирается вашей программы.


Что касается заголовочного файла, тот тут уже возможно, что заголовочные не подходит. Те библиотеки версии 3 с чем-то что ли... Я точно не помню.

Ещё забыл... Это предкомпилированные библиотеки для MSVC-2015. Который 64-х разрядный

  • #
  • 25 мая 2018 г. 15:27

а для mingw32 есть что?)

Кажется я напортачил с номеров версии библиотеки. Я к сожалению не могу сейчас проверить под mingw, но если не ошибаюсь, то вам нужна версия 1.0.2 с того сайта, что вы указали в самом начале. 1.1.0 не подходит, она значительно перепилена и заголовочные файлы там отличаются...


Просто установите, и заберите одноимённые библиотеки, как те, что я предложил из своих.

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
25 июня 2018 г. 11:55
lebendig

C++ - Тест 006. Перечисления

  • Результат 100 баллов
  • Очки рейтинга 10
25 июня 2018 г. 11:24
lebendig

C++ - Тест 005. Структуры и Классы

  • Результат 100 баллов
  • Очки рейтинга 10
25 июня 2018 г. 8:48
lebendig

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
25 июня 2018 г. 9:34
EVILEG

Как написать игру на Qt - Урок 4. Враг - смысл в выживании

Там неправильный подсчёт был по направлению и полный бардак был с поведением, эти 45 градусов исправляли ситуацию. Точную причину уже совсем не помню. А вообще все эти расчёты довольно...
25 июня 2018 г. 9:13
MarkSD

Как написать игру на Qt - Урок 4. Враг - смысл в выживании

Здравствуйте, Подскажите, пжлст, как работает этот код : QLineF lineToTarget(QPointF(0, 0), mapFromItem(target, 0, 0));  // Проводим линию от паука к мухе qreal angl...
25 июня 2018 г. 7:51
EVILEG

PyQt5 - Урок 003. QSystemTrayIcon - Как свернуть приложение в трей

Если не ошибаюсь, можно просто удалить вот эту строку central_widget.setLayout(grid_layout) Там указатель на парента передаётся в само размещение, что автоматически заменяет в размещен...
Сейчас обсуждают на форуме
25 июня 2018 г. 17:38
IscanderChe

Иконка исполняемого файла

Спасибо!
25 июня 2018 г. 13:12
Arrow

QComboBox и База данных

И если можно еще один вопрос. Таблицы во вложении. Если писать: mainModel = new QSqlRelationalTableModel(this);mainModel-&g...;
25 июня 2018 г. 7:49
EVILEG

На чём сделан этот сайт?

Добрый день! На сервере сайта установлена Ubuntu 16.04. В качестве сервера используется VDS. Хостинг-провайдер Timeweb . Сайт написан на Django/Python, для...
19 июня 2018 г. 7:56
EVILEG

как редактировать порядок обхода этементов по нажатию TAB в Qt5 qml

Что-то наподобие такого TextField { Keys.onReturnPressed: nextItemInFocusChain().forceActiveFocus()}

Рекомендуемые страницы