Как запустить qt программу на другом компьютере

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. Порядок действий:

  1. Качаем программу UPX — версию для windows
  2. Распаковываем скаченный архив
  3. Возвращаемся к нашим 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 накладно.

Читайте также:
Что такое старые файлы программы chkdsk

В качестве среды для разработки используется 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 и найдем там наше приложение:

Папка с EXE файлом приложения

Если мы его запустим, то получим ошибку:

Ошибка при запуске приложения

Первый способ — Официальная утилита 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 компилятором:

Компилирование в режиме Release

Найдите папку, в которой находится скомпилированный EXE файл. Например, в моем случае это папка D:HarrixProjectsQtuntitled_buildrelease :

Папка с EXE файлом

Теперь можно в командной строке вызвать windeployqt с указанием папки с EXE файлом:

windeployqt D:HarrixProjectsQtuntitled_buildrelease

Вызов команды windeployqt

Теперь в папке добавились нужные файлы:

Папка с EXE файлом и DLL

Но если попробовать запустить EXE файл, то вылетит ошибка, так как три DLL не скопировались: libwinpthread-1.dll , libstdc++-6.dll , libgcc_s_seh-1.dll . Их нужно вручную скопировать из той же папки, где находится windeployqt.exe :

Папка с недостающими DLL

После этого приложение должно запуститься. Настоятельно рекомендую проверить работоспособность приложения на чистом компьютере без установленной Qt.

Для компилятора Visual Studio алгоритм тот же, но лучше еще добавить параметр —compiler-runtime , например:

windeployqt —compiler-runtime D:HarrixProjectsQtuntitled_buildrelease

Если у вас приложение с использованием QML, то нужен параметр —qmldir с указанием папки, где хранятся .qml файлы:

windeployqt —compiler-runtime —qmldir D:HarrixProjectsQtuntitled D:HarrixProjectsQtuntitled_buildrelease

Стоит обратить внимание на то, что windeployqt может копировать лишние файлы. От них можно избавиться, потихоньку удаляя файлы из папки на чистом компьютере.

Второй способ — Ручной

Начало решения проблемы

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru