Qt windows. Qt запуск приложения под windows. Qt cтатическая сборка. Запуск Qt приложений на других пк.
Транзисторы, резисторы, микросхемы, микроконтроллеры. C/C++, C#, PHP, HTML и пр.
3 сообщения • Страница 1 из 1
Qt windows. Qt запуск приложения под windows. Qt cтатическая сборка. Запуск Qt приложений на других пк.
Сообщение admin » 06 дек 2014, 16:29
При запуске Qt приложения на компьютере без установленной QT приложение не работает, при этом нет никаких сообщений об ошибках. Чтобы приложение Qt запустилось, необходимо вместе с ним скопировать все динамические (*.dll) библиотеки, которые использовались при его создании, либо статически слинковать свою программу. В результате статической линковки получиться самодостаточный exe файл.
Надо отметить, что в результате статической линковки размеры exe-файлов существенно возрастают. Например, изначально exe-файл занимал всего 1,38 МБ и требовал различных библиотек в сумме на 43,5 МБ. После описанных процедур он увеличился до 16,1 МБ. Но уже всё, что надо, у него есть.
Как запустить .exe вне QT Creator (DLL Collector, windeployqt)
Протестировано для: Qt 5.3.2, компилятор MinGW 4.8.2 32bit, Windows 7 64bit. Написано на основе qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW но без использования Windows PowerShell.
Итак, нужно сделать следующее:
2. Проверить, что всё работает правильно
а) запустить Qt Creator, создать новый проект, собрать его, запустить;
б) закрыть Qt Creator и попробовать запустить *.exe отдельно от среды разработки;
в) убедиться в том, что программа требует кучу дополнительных библиотек;
г) закрыть всё, подумать о том, какая сложная штука — жизнь.
Теперь можно идти дальше.
3. Открыть файл С:Qt5.3Srcqtbasemkspecswin32-g++qmake.conf
Если папка Src отсутствует, то создайте папку Src и разархивируйте в неё исходники скаченные в пункте 1.д.
На всякий случай можно сделать бэкап.
Добавить в конец файла (взято из windows-build-qt-static.ps1):
# Static QMAKE_LFLAGS += -static -static-libgcc QMAKE_CFLAGS_RELEASE -= -O2 QMAKE_CFLAGS_RELEASE += -Os -momit-leaf-frame-pointer DEFINES += QT_STATIC_BUILD CONFIG += static # Static
Сохранить изменения и закрыть файл от греха подальше.
:: . check path. set QtDir=C:Qt5.3static set MingwDir=C:QtToolsmingw482_32 set QtSrcDir=C:Qt5.3Src set CMAKE_INCLUDE_PATH=%MingwDir%i686-w64-mingw32include :: Set a clean path including MinGW. set PATH=%PATH%;%MingwDir%bin;%MingwDir%optbin :: Force English locale to avoid weird effects of tools localization. set LANG=en :: Set environment variable QT_INSTALL_PREFIX. Documentation says it should be :: used by configure as prefix but this does not seem to work. So, we will :: also specify -prefix option in configure. set QT_INSTALL_PREFIX=%QtDir% :: Configure, compile and install Qt. cmd /c «%QtSrcDir%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» > log_cmd.txt mingw32-make -k -j4 > log_make.txt mingw32-make -k -j4 install > log_make_install.txt pause
Проверить соответствие всех путей до папок «static», «Tools», «Src» . Это действительно важно.
Запуск Qt приложений .exe вне Qt Creator
Если всё правильно, сохранить и закрыть файл.
5. Открыть консоль cmd.exe и запустить make.bat
Этот процесс длится примерно час или два, в зависимости от скорости работы компьютера. Если всё завершилось через 5 минут или раньше, то что-то пошло не так.
В файлах log_cmd.txt, log_make.txt, log_make_install.txt можно почитать сообщения об ошибках.
6. Настроить Qt Creator.
Параметры -> Сборка и запуск -> Профили Qt -> Добавить
Выбрать файл С:Qt5.3staticbinqmake.exe
Название профиля: Qt (static)
Параметры -> Сборка и запуск -> Комплекты -> Добавить
Название: Static
Тип устройства: Desktop
Устройство: Локальный ПК
Sysroot: C:Qt5.3static
Компилятор: MinGW
Отладчик: Не задан
Профиль Qt: Qt (static)
Теперь в Qt Creator доступен комплект статической сборки.
Проекты -> Сборка и запуск -> добавить -> Static
7. В файле проекта (*.pro) добавить флаги
QMAKE_LFLAGS += -static -static-libgcc
Наверное, как-то можно эти флаги убрать в параметры Qt Creator, но у меня это не получилось.
Это всё. Осталось только пересобрать свой проект с новым комплектом. Теперь можно запускать скомпилированные exe-файлы на любом компьютере под управлением Windows 7 или Windows XP. На других системах не тестировалось.
Источник: www.yourdevice.net
Qt 5: подготовка программы для windows к запуску на других компьютерах
Расскажу, как запустить программу, написанную на C++/Qt для windows, на другом компьютере, где библиотеки Qt 5 не установлены. Вот мы, допустим, установили Qt Creator, создали приложение из одного окна с надписью «Hello World», выбрали для сборки конфигурацию «Выпуск» и нажали заветный зелёный треугольник. Через несколько секунд успешно запустится наша программа. Находим, где же программа лежит.
Путь к ней будет примерно такой: D:…Projects2013-09-30_HelloWorldbuild-HelloWorld-Desktop_Qt_5_2_0_MinGW_32bit-ВыпускreleaseHelloWorld.exe. Радоваться рано. Если мы закроем Qt Creator, отправимся по этому пути и попытаемся запустить HelloWorld.exe,то получим следующую ошибку: «Запуск программы не возможен, так как на компьютере отсутствует Qt5Core.dll. Попробуйте переустановить программу.» Точно такая же ошибка возникнет на любом другом компьютере, где мы попытаемся запустить эту программу. Варианты решения:
1. Пересобрать сам Qt, чтобы собранные приложения статически линковались с библиотеками Qt 5 — долго, сложно, программа будет тяжёлая, и заморочки с лицензированием
2. Устанавливать на все компьютеры, где будем использовать программу, библиотеки Qt 5, совместимые с нашей сборкой, и прописывать путь к ним в системной переменной PATH
3. Сложить все необходимые DLL-библиотеки в одну папку с экзешником нашей программы. Получится по сути Portable-версия, которую можно будет хоть с флэшки запускать. Этот способ самый простой, им и воспользуемся.
1. Копируем программу в отдельную папку
2. Запускаем, смотрим имя файла в тексте ошибки
3. Находим этот DLL-файл в папке C:QtQt5.2.05.2.0mingw48_32bin и копируем его рядом с экзешником
4. Возвращаемся к пункту 2 и повторяем до тех пор, пока программа не запустится.
Итого у меня по минимуму получился следующий список DLL-библиотек для Qt 5.2:
- icudt51.dll
- icuin51.dll
- icuuc51.dll
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
- Qt5Core.dll
- Qt5Gui.dll
- Qt5Widgets.dll
- HelloWorld.exe
Всего размер папки получился 42 Мб, вроде как бы многовато для простого Hello World. Кого это не смущает — уже могут делиться своей программой. А я расскажу теперь, как сократить этот объём хотя бы до 16 Мб, не сильно сложно (для сравнения библиотеки Qt4 от известной программы для хранения паролей KeePassX весят 10 Мб). Библиотеки и программу мы будем просто сжимать бесплатным свободным упаковщиком UPX. Порядок действий:
- Качаем программу UPX — версию для windows
- Распаковываем скаченный архив
- Возвращаемся к нашим DLL-файлам, щёлкаем по каждому правой кнопкой, выбираем «Открыть с помощью» — upx.exe
Вот теперь папка с нашей программой весит 16 Мб, и её содержимое можно спокойно запускать на других компьютерах.
Запись опубликована 2014-05-01 автором admin в рубрике с метками dll, exe, qt, UPX, windows.
Об авторе admin
Инженер-программист, системный администратор
Источник: kmsvsr.ru
Запуск Qt приложений .exe вне Qt Creator
В статье рассказывается как запускать приложения, созданные в Qt без самого Qt Creator. Или же приложения должны запускаться на компах, где нет Qt.
Тут расскажу о самом механизме нахождения DLL, так как Qt активно развивается и регулярно новые версии выпускает, и под каждую версию писать статью о новом наборе DLL накладно.
В качестве среды для разработки используется Qt 5.2.0 for Windows 32-bit (MinGW 4.8). Для версий не с компилятором MinGW алгоритм решение проблемы может быть иным.
Проблема
При запуске приложения в самом Qt Creator (при нажатии на зеленую стрелку, или же через меню, или же иным способом) мы видим наше приложение:
Когда мы создавали приложение, то мы видели следующее окно:
Указанные тут папки и есть папки, куда сохраняется наше приложение.
Если мы перейдем в папку C:Qtbuild-Example-Desktop_Qt_5_2_0_MinGW_32bit-Debug (у вас папка может по-другому называться), то увидим следующее:
Зайдем в папку debug и найдем там наше приложение:
Если мы его запустим, то получим ошибку:
Первый способ — Официальная утилита windeployqt
У Qt есть утилита windeployqt , которая поставляется с Qt и про которую можно прочитать тут http://doc.qt.io/qt-5/windows-deployment.html. Она решает ту же задачу, что и второй способ ниже.
Update 2018. Сейчас библиотека стала работать гораздо лучше. Поэтому ниже будет более подробная инструкция по использованию windeployqt .
Итак, в командной строке перейдите в папку bin того компилятора, под которым вы компилируете приложение в режиме Release . В этой папке должен быть файл windeployqt.exe . Например, у меня в данный момент для MinGW это папка D:Qt5.12.0mingw73_64bin , а для Visual Studio D:Qt5.12.0msvc2017_64bin .
Перейти можно с помощью команды cd :
Скомпилируйте в режиме Release ваше приложение. Для примера я создал простое Qt Widgets Application и скомпилировал под MinGW компилятором:
Найдите папку, в которой находится скомпилированный EXE файл. Например, в моем случае это папка D:HarrixProjectsQtuntitled_buildrelease :
Теперь можно в командной строке вызвать windeployqt с указанием папки с EXE файлом:
windeployqt D:HarrixProjectsQtuntitled_buildrelease
Теперь в папке добавились нужные файлы:
Но если попробовать запустить EXE файл, то вылетит ошибка, так как три DLL не скопировались: libwinpthread-1.dll , libstdc++-6.dll , libgcc_s_seh-1.dll . Их нужно вручную скопировать из той же папки, где находится windeployqt.exe :
После этого приложение должно запуститься. Настоятельно рекомендую проверить работоспособность приложения на чистом компьютере без установленной Qt.
Для компилятора Visual Studio алгоритм тот же, но лучше еще добавить параметр —compiler-runtime , например:
windeployqt —compiler-runtime D:HarrixProjectsQtuntitled_buildrelease
Если у вас приложение с использованием QML, то нужен параметр —qmldir с указанием папки, где хранятся .qml файлы:
windeployqt —compiler-runtime —qmldir D:HarrixProjectsQtuntitled D:HarrixProjectsQtuntitled_buildrelease
Стоит обратить внимание на то, что windeployqt может копировать лишние файлы. От них можно избавиться, потихоньку удаляя файлы из папки на чистом компьютере.