f
25 мая 2018 г. 8: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? или ничего не нужно делать?
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
12

С этим 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

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

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

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

Скачал 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
Это что? Куда?

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


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

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

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

В параметрах настройки проекта нужно добавить дополнительный шаг и прописать install в make arguments
f
  • 25 мая 2018 г. 9: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

Вам нужна эта либо, чтобы просто была поддержа 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 значит не совсем правильно прописали пути, куда кидать библиотеку. Она просто не нашлась.
f
  • 25 мая 2018 г. 10:02

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

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

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


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

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

f
  • 25 мая 2018 г. 10:27

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

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


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

Сюда нужно добавить? Что то у меня не собираеться после этого.

да не, я их кидал рядом с exe файлом, который компилируется. А так можно для шага инсталляции в pro файле написать, куда и откуда копировать.

Можно в PRO файле указать путь, откуда и куда копировать.

У нас в проекте для либ так указано

win32 {
    dlltarget.path = $$PATH_INSTALL_BIN

    INSTALLS += dlltarget
} else {
    target.path = $$PATH_INSTALL_BIN

    INSTALLS += target
}

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
g
29 мая 2020 г. 14:32
glushchenkoin

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

  • Результат:40баллов,
  • Очки рейтинга-8
АС
26 мая 2020 г. 11:29
Артём Сун-Дун-Чан

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

  • Результат:50баллов,
  • Очки рейтинга-4
МН
25 мая 2020 г. 11:33
Митя Нагибин

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

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
29 мая 2020 г. 13:00
Евгений Легоцкой

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Думал так, но похоже что нет. {{ post.votes.likes.user.username }} Это же QuerySet будет, а не отдельный единственный объект {% for vote in post.votes %} {{ vote.user.username …
29 мая 2020 г. 11:43
Владислав Меленчук

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

А как получить имя пользователя, который поставил лайк? Думал так, но похоже что нет. {{ post.votes.likes.user.username }}
29 мая 2020 г. 6:30
Евгений Легоцкой

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

У меня работает. Исправлял в проекте, который приложен к статье. А что происходит в вашем коде, с учётом места вызова этого кода, я знать не могу ;) Дебажьте и добавляйте условия, кото…
МА
29 мая 2020 г. 6:27
Михаил А

Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце

QModelIndexList rowIndexes = ui->tableView->selectionModel()->selectedRows(); model->removeRows(rowIndexes.first().row(), rowIndexes.size()); model-&…
29 мая 2020 г. 6:14
Евгений Легоцкой

Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте

Неправильно прописали URL, на который возвращается ответ от OAuth ВКонтакте. Настраивайте ваше приложение в консоли разработчика ВКонтакте
Сейчас обсуждают на форуме
ДК
29 мая 2020 г. 13:27
Джон Кофи

QMap<> какой ключ лучше

это ясно. Вопрос в том, как быстро мапа будет отрабатывать, если ключом будет QModelIndex. Какой параметр индекса возьмет за ключ. И вот насколько это будет медленнее или быстрее, чем QString пр…
ДК
29 мая 2020 г. 11:10
Джон Кофи

QModelIndex становится не действительным, но валидный

Привет. Есть проблема с индексом и для меня это чистая магия: Сначала, что делаю: на вьюхе есть редактируемые ячейки. Пользователь редактирует одну, потом внезапно решает не сохраниться и ш…
29 мая 2020 г. 7:52
Vladimir Sergeevich

Масштабирование двумя пальцами на мобильных платформах

Я планировал описать этот момент на блоге, но никак руки не доходят (уже год). Летом дойдут. Тем не менее, у меня в репозитории лежит рабочий код игрушки "пазлы", где есть все это. …
29 мая 2020 г. 6:51
Евгений Легоцкой

Графическое ускорение

Зависит от платформы и поддерживаемых технологий. В QML в первую очередь используется OpenGL и отрисовка производится средствами GPU. Но может переключаться на использование CPU и прог…
ИП
29 мая 2020 г. 1:55
Игорь Порошин

QTablwView + QSqlQueryModel скрыть пустой столбец

Да, понятно. В данном случае лучше использовать серверную процедуру (если такие поддерживаются), в которой будет проверяться наличие всех пустых строк у нужного столбца и вызываться соответ…
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB