f
25 мая 2018 г. 19: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? или ничего не нужно делать?
4

Вам это нравится? Поделитесь в социальных сетях!

14
Evgenii Legotckoi
  • 25 мая 2018 г. 20: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

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

Сами нужные библиотеки можете скачать по этой ссылке
    f
    • 25 мая 2018 г. 20:15

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

    Скачал 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
    Это что? Куда?
      Evgenii Legotckoi
      • 25 мая 2018 г. 20:20
      • (ред.)

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


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

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

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

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

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

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

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


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

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

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

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

                    Evgenii Legotckoi
                    • 26 мая 2018 г. 0:51

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


                    Просто установите, и заберите одноимённые библиотеки, как те, что я предложил из своих.
                      Юрий
                      • 11 февраля 2019 г. 22:46


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

                        Evgenii Legotckoi
                        • 12 февраля 2019 г. 12:44

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

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

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

                        1. win32 {
                        2. dlltarget.path = $$PATH_INSTALL_BIN
                        3.  
                        4. INSTALLS += dlltarget
                        5. } else {
                        6. target.path = $$PATH_INSTALL_BIN
                        7.  
                        8. INSTALLS += target
                        9. }
                          m
                          • 27 ноября 2020 г. 15:49

                          К продолжению темы в QT 5.15.1 появились уже готовые libeay32.dll и ssleay32.dll на машине сборки все работает. На целевую машину в папку с exe подкидываю libeay32.dll и ssleay32.dll результата нет. Можно еще разок подробнее что нужно сделать что бы подцепились эти dll на целевой машине.

                            m
                            • 1 декабря 2020 г. 0:20

                            К продолжению темы в QT 5.15.1 появились уже готовые libeay32.dll и ssleay32.dll на машине сборки все работает. На целевую машину в папку с exe подкидываю libeay32.dll и ssleay32.dll результата нет. Можно еще разок подробнее что нужно сделать что бы подцепились эти dll на целевой машине.

                              Комментарии

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