Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
f
May 25, 2018, 1:50 p.m.

Установка 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? или ничего не нужно делать?
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

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

Сами нужные библиотеки можете скачать по этой ссылке
1
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
Это что? Куда?
0

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


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

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

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

В параметрах настройки проекта нужно добавить дополнительный шаг и прописать install в make arguments
1
f
  • May 25, 2018, 2:37 p.m.
  • (edited)

А устанавливать в целом 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
0

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

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

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

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


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

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

0
f

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

0

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


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

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

0

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

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

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

win32 {
    dlltarget.path = $$PATH_INSTALL_BIN

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

    INSTALLS += target
}
0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Last comments
Feb. 21, 2019, 12:51 p.m.
Евгений Легоцкой

Иногда CMake приходится перезапускать начисто, не обновляет кэш
R
Feb. 21, 2019, 12:29 p.m.
RandyGallup

Я указал данные строки, т.к. без них у меня вылетала следующая ошибка: By not providing "FindQt5Core.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configurat...
Feb. 21, 2019, 12:08 p.m.
BlinCT

Вот атк выглядит мой проектник, посмотрите его. cmake_minimum_required(VERSION 3.6)project(projecttimer)set(CMAKE_CXX_STANDARD 11)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)find_packa...
Feb. 21, 2019, 12:04 p.m.
BlinCT

Смотрите, если вы используете глобально для проекта -DCMAKE_PREFIX_PATH= то вам не надо уже указывать вот эти строкиset(Qt5Core_DIR "C:/Qt/5.12.1/mingw73_64/lib/cmake/Qt5Core")set(Qt5Gui_DIR...
R
Feb. 21, 2019, 11:54 a.m.
RandyGallup

Даже не запускается. main.cpp у меня точно такой же, как в статье. CMakeLists.txt пришлось немного подправить (прикрепил ниже), т.к. не находились некоторые файлы. cmake_minimum_requi...
Now discuss on the forum
Feb. 21, 2019, 8:58 a.m.
Евгений Легоцкой

Ну у меня координаты передавались в зависимости от положения курсора мыши, а в вам по сути нужно будет аналогичным способом посылать даннные из полей ввода. Так что здесь скорее интерфес...
Feb. 20, 2019, 9:55 p.m.
Евгений Легоцкой

Не до конца понимаю сути вопроса, наверное, нужно увидеть программный код и попытку его применения, но к методам базового класса можно обращаться в наследованном классе через вызов по имени ба...
MU
Feb. 20, 2019, 3:06 p.m.
Maciej Urmański

Yes, ok I have solution! Thank you for directing me about annotate.:) Solution is: users_in = User.objects.filter(joined_users__goal=goal, joined_users__joined=True)
Feb. 20, 2019, 2:40 p.m.
Евгений Легоцкой

Думаю, что ещё можно переопределить mouseReleaseEvent(QMouseEvent* event) у QTableView, который содержит модель и немного поиграться с индексом. Если это индекс, который соответству...
Feb. 20, 2019, 10:34 a.m.
Евгений Легоцкой

Да, так тоже можно. Единственный момент в том, что lupdate не всегда понимает, к какому контексту это дело относится, и может запихать в левый контекст. В небольшом проекте это не критич...
Join us in social networks

For registered users on the site there is a minimum amount of advertising