Как из qt программы сделать exe

Запуск Qt приложений .exe вне Qt Creator

В статье рассказывается как запускать приложения, созданные в Qt без самого Qt. Или же приложения должны запускаться на компах, где нет Qt.

28.01.2014 63 комментария 125 872 просмотров

В статье рассказывается как запускать приложения, созданные в Qt без самого Qt Creator. Или же приложения должны запускаться на компах, где нет Qt.

Для версии Qt под компилятор Visual Studio статья другая.

Содержание

Тут расскажу о самом механизме нахождения 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 и найдем там наше приложение.

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

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

Мы же хотим, чтобы приложение запускалось на других компах? Поэтому надо в окончательном виде выдавать приложение, а не в режиме отладки.

    Внизу, над зеленым треугольником выбираем режим Release :

Запускаем приложение, нажатием на зеленый треугольник:

Как видим, через некоторое время запустилось привычное нам приложение. Но теперь *.exe файл появился в папке, которое мы указывали для Release:

Заходим в эту папку (у меня это C:Qtbuild-Example-Desktop_Qt_5_2_0_MinGW_32bit-Release ):

Если в прошлый раз мы заходили в папку debug , то сейчас заходим в папку release , и запускаем приложение.

  • Кстати, для последующего распространения программы нам из папки нужен (из текущих файлов) только *.exe файл, поэтому файлы main.o, mainwindow.o, moc_mainwindow.cpp, moc_mainwindow.o можно удалить без ущерба (это служебные файлы, которые при каждой компиляции будут появляться).
  • Нахождение Dll и других файлов

    Итак, приложение ругается на отсутствие Qt5Core.dll (у вас может быть цифра другая, если в момент чтения статьи вышла иная версия Qt). Где этот файл искать?

    1. Найдите папку, в которую устанавливался Qt. У меня это папка C:QtQt5.2.0
    2. В ней найдите папку с номером версии вашего Qt. У меня это первая папка с названием 5.2.0-rc1 . У вас скорее всего будет немного по другому называться (у меня сейчас beta версия стоит).

    В ней будет папка компилятора MinGW:

    Переходим в неё:

    В ней находим главную папку bin :

    И в этой папке находим нужные нам dll . Находим тут Qt5Core.dll (не Qt5Cored.dll . ) и копируем в папку C:Qtbuild-Example-Desktop_Qt_5_2_0_MinGW_32bit-Releaserelease (где наш *.exe файл находится). И запустим приложение:

    И вот так копируем все нужные dll, которые просит приложение. У меня потребовались следующие dll: icudt51.dll, icuin51.dll, icuuc51.dll, libgcc_s_dw2-1.dll, libstdc++-6.dll, libwinpthread-1.dll, Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll. И вот приложение запустилось:

    Ура! Но рано радоваться. Если мы запустим на компе, где нет Qt, то приложение выдаст ошибку, так как не может найти библиотеки. Надо скопировать еще несколько файлов. Помните основную папку Qt?

    Там есть папка Tools :

    В ней есть папка QtCreator :

    В ней папка bin :

    Скопируйте файл qt.conf в папку с *.exe файлом.

    Теперь перейдите в папку с компилятором:

    А там перейдем в папку plugins , а оттуда в platforms :

  • Скопируйте файлы qminimal.dll и qwindows.dll . Но вставим не просто в папку с *.exe файлом, там создадим папку plugins , а там папку platforms , и уже в нее вставим файлы. То есть для всех dll, которые нам могут пригодиться, нокоторые находятся не прямо в папке bin, то для этих dll в папке с exe файлом мы должны создать такие же папки, в которых они находились, относительно папки компилятора. В нашем случае в папке с компилятором файлы находись под именами: [путь к папке с компилятором] plugins platforms qminimal.dll , [путь к папке с компилятором] plugins platforms qwindows.dll . Поэтому копируйте так: [путь к папке с *.exe файлом] plugins platforms qminimal.dll , [путь к папке с *.exe файлом] plugins platforms qwindows.dll .
  • Вот теперь приложение запустится везде! То есть вы должны вместе с exe файлом копировать все эти dll и qt.conf. На скриншоте временные файлы я не удалил.

    Здесь показан принцип, как находить нужные dll. Если вы используете какие то другие компоненты, например, QWebView, то вам будут нужны еще другие dll, которые вы находите аналогичным способом.

    Помните, что если вы используется QtQuick то вам еще потребуется папка qml.

    Внимание! Иногда описанный выше способ не помогает. Вроде скопировали все dll, что вам могли пригодиться, приложение даже запускается, но вы видите лишь белый экран, например, или приложение вообще не появляется, но в диспетчере задач появляется.

    В таком случае копируйте все dll из папки bin (а из остальных мест в виде папок, где они хранятся) и начинайте скрупулезно удалять поштучно dll до тех пор пока не сузите число файлов до минимально работающего числа. Помните, что все dll есть в двух вариантах: для release и ли debug режима. Для debug режима в имени dll появляется буква d. Эти файлы вам не нужны.

    Компьютерный блог. Статьи, уроки и инструкции

    Популярные статьи

    • Почему из продажи исчезают нетбуки? Куда они пропали?(5,00 из 5)
    • Как устроен ПК. Устройство компьютера кратко(5,00 из 5)
    • Как установить Autotune 8.1? Ошибка iLok(5,00 из 5)
    • Кабели Ethernet, типы LAN кабелей, CAT5, CAT6(5,00 из 5)
    • Как увеличить FPS в играх, отключив HPET?(4,90 из 5)
    • Износ компьютера. Причины износа компьютера(4,67 из 5)
    • Что лучше: Windows или Linux?(4,67 из 5)
    • Как установить MinGW 7.3.0 32bit для QT Creator 5.12.0?(4,60 из 5)

    Категории

    • Видеоуроки (1)
      • Аудио (1)
    • Компьютеры и технологии (16)
      • Базы данных (2)
      • Полезное (6)
    • Программирование (7)
      • QT Creator (2)
      • Xcode и Swift (5)
    • Сети и Интернет (5)
      • Безопасность (3)
    • Софт (1)

    Свежие комментарии

    материнские платы Ас(н)ус не имеют этой настройки, отключай средствами виндоус

    Помогите ребята не могу найти где в БИОСе HPET мат…

    Я ошибся, у меня всё равно иногда было меньше, пришлось…

    Удивительно конечно! Рад, что помог хотя бы косвенно 🙂

    Была такая ситуация, переустанавливал windows 7 один раз, когда комп…

    Рассылка

    Запуск (сборка) приложения Qt для Windows XP

    Иногда может случиться такая ситуация, что необходимо скомпилировать и в будущем запустить ваше приложение, разработанное в среде Qt Creator в устаревшей Windows XP. Разберём в этой статье, как это сделать.

    И вот, ваши дела шли чудесно, но в один день вам захотелось/понадобилось запустить ваше приложение в Windows XP. «Элементарно» — подумали вы, но тут не так всё просто. Перейдя на официальную вики Qt , в статью по поддержке платформ (https://wiki.qt.io/PlatformSupport), можно увидеть, что в таблице официальная поддержка Win Xp есть в версия Qt с 5.0 по 5.6.

    Поэтому самым простым и действенным способом будем скачивание Qt, например, версии 5.5.1 (qt-opensource-windows-x86-mingw492-5.5.1.exe) с репозитория https://download.qt.io/archive/qt/5.5/5.5.1/ и установка на свой ПК (если у вас стоит более новая версия).

    Будем использовать такую связку: Qt+MinGW 4.9.2 32 bit, что и укажем во время установки Qt.

    После установки, запустим Qt и откроем проект и на экране появится следующий предупреждающий диалог (необходимо нажать кнопку «ок»):

    Далее необходимо выбрать компилятор и нажать кнопку «Настроить проект». Если вдруг у вас после установки определился не тот компилятор, отладчик или комплект, то вы можете воспользоваться методикой из статьи http://2compa.ru/qt-creator/kak-ustanovit-mingw-7-3-0-32bit-dlja-qt-creator-5-12-0/ , где я рассказывал, как вручную настроить MinGW 7.3, но по такой же методике, вы сможете в параметрах сборки и запуска, настроить свой комплект Qt.

    Добавим в файл .pro следующую строку:

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

    Попробуем скомпилировать проект. В моём случае проект небольшой (2500 строк) и он удачно скомпилировался. Бинго! Программа запущена. В вашем случае компилятор может выдавать ошибки (из-за разности версий и меняющегося Qt-функционала), которые придётся исправлять. Для этого, пользуйтесь гуглом.

    Небольшая оговорка: Qt 5.5.1 у меня почему-то не запустился на Win XP, но запустился на Win 7, а затем после того как я собрал все необходимые .dll, программа запустилась и на Win XP (с пакетом обновления 3).

    Как собрать .dll в одном месте для программы, написанной в Qt, чтобы запустить на Win XP?

    1 Вариант. Windeployqt

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

    Диск:Путь установки QtВерсия Qtmingw***_**bin.

    Чтобы это сделать откройте два окна проводника, в одном папку релиза вашего проекта, в котором оставьте просто .exe файл. А во втором окне путь с инструментом, указанным выше.

    И перетащите файл с названием вашего проекта на файл windeployqt.exe. Далее пойдёт процесс копирования необходимых файлов в папку с исполняемым файлом.

    Конечно, у этого инструмента есть недостаток. Недостаток заключается в том, что он копирует не все необходимые .dll и с высокой долей вероятности ваша программа при запуске может выдать системную ошибку, вроде такой:

    Для исправления такой ошибки, нужно скопировать файл libgcc_s_dw2-1.dll в каталог с программой (этот файл находится по пути инструмента windeployqt). Соответственно, эту процедуру нужно сделать для всех ошибок такого рода. После этого, программа должна успешно запуститься по нажатию на исполняемый файл.

    2 Вариант. LibraryCollector (раньше назывался DLLCollector)

    Скачиваем DLLCollector или LibraryCollector (по моим ощущениям более старый DLLCollector работает стабильнее). Скачать LibraryCollector вы можете по следующей ссылке с киберфорума. А устаревшую DllCollector можете скачать по прямой ссылке с моего блога.

    Запускаем утилиту (обязательно от имени администратора) и указываем пути:

    name – путь к исполняемому файлу.

    bin – путь к папке bin в папке mingw***_** по пути с Qt Creator.

    plugins – путь к папке plugins в папке mingw***_** по пути с Qt Creator.

    to – путь к папке, в которую будут копироваться dll и исполняемый файл.

    Нажимаем кнопку «Run», ваша программа должна запуститься. Далее закройте программу и нажмите кнопку «Update». Далее вам необходимо выполнять действия в программе, чтобы утилита определила все файлы, необходимые для работы вашей программы, которые отобразятся в списке:

    Закройте программу и нажмите кнопку «Copy». Все необходимые для работы .dll скопируются в папку с вашим исполняемым файлом. Поздравляю!

    Небольшие ХАКИ для запуска приложения в WIN XP. Исправление ошибки « Не является приложением Win32».

    Если вы используете Qt вместе с Visual Studio (а не компилятором MinGW) и пытаетесь развернуть свое приложение на компьютере под управлением Windows XP или Windows Server 2003, скорее всего, вы видите эту ошибку.

    Эта ошибка не возникнет для Qt с Visual Studio 2010, но появляется при использовании Visual Studio 2012, 2013 или Visual Studio 2015.

    Самый простой способ это исправить – добавить одну дополнительную строку в файл .pro вашего проекта. Второй способ – выполнить бинарное исправление файла .exe вашего приложения.

    Небольшое примечание: Эта же ошибка («…не является приложением Win32») возникает при попытке запустить 64-разрядное приложение в 32-разрядной системе Windows XP или Windows 2003, поэтому убедитесь, что ваше приложение действительно 32-разрядное. Один из способов проверки разрядности: запустите приложение в Windows 7 или 10, запустите диспетчер задач, на вкладке процесса проверьте, что имя вашего приложения имеет суффикс «*32».

    Для первого способа достаточно открыть .pro файл вашего проекта и добавить туда следующую строку:

    QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01

    Примечание: если вы компилируете 64-битный файл .exe (и, таким образом, нацелены на 64-битную Windows XP), вместо этого вам следует установить для QMAKE_LFLAGS_WINDOWS значение /SUBSYSTEM:WINDOWS,5.02.

    Второй способ – более экзотический, для этого воспользуемся редактором двоичных / шестнадцатеричных файлов. Откройте файл .exe вашего приложения, перейдите почти к началу файла и отыщите шестнадцатеричную последовательность 06 00 00 00 00 00 00 00 (повторяется один раз). Эта строчка находится по адресу 0000130, но может находиться между 0000120 и 0000150. Замените её на 05 00 01 00 00 00 00 00.

    Примечание: если это 64-битный файл .exe, вместо этого вы должны изменить строку на 05 00 02 00 00 00 00 00.

    Сохраните exe файл и он должен запуститься.

    Готовим приложение на Qt к работе на другом компьютере

    Как правило программы пишутся для того чтобы их впоследствии распространять. Либо в открытом доступе, либо локально (например, внутри компании).

    Как сделать, чтобы пользователь мог работать с программой, написанной на Qt, на своём компьютере?

    Подготовку программы на Qt к распространению можно условно разделить на два этапа:

    Компиляция программы в «релиз»;

    Комплектация программы необходимыми библиотеками.

    Рассмотрим оба этапа применительно к Qt 5.7 с компилятором MinGW для операционной системы Windows.

    Компиляция программы в «релиз»

    Существуют два основных варианта компиляции приложения:

    Отладочный вариант используется только на этапе разработки и не предназначен для распространения. Кроме того, при комплектации библиотеками для отладочного варианта последние должны иметь суффикс « d » в названии.

    Поэтому программу перед распространением необходимо скомпилировать в варианте «Выпуск» («релиз»).

    Выбрать нужный вариант компиляции можно непосредственно в рабочем окне QtCreator как показано на скриншоте.

    После выбора варианта компиляции и её последующего запуска, программа будет скомпилирована соответствующим образом.

    Комплектация библиотеками

    После компиляции программы её следует обязательно укомплектовать необходимыми библиотеками.

    Дело в том, что в папке со скомпилированной программой находится только исполняемый файл (exe). В таком виде программа будет работоспособна только при запуске из QtCreator, что для обычного пользователя совершенно не приемлемо (да и для самого разработчика не всегда удобно).

    Конкретный перечень необходимых библиотек зависит от проекта. Ниже приведён список самых основных из них (которые требуются для запуска любого Qt приложения).

    Библиотеки собственно Qt:

    Их, а также другие библиотеки Qt можно найти в папке : папка_установки_QtToolsmingw530_32bin

    Служебные библиотеки компилятора:

    Их можно найти в папке: папка_установки_Qt5.7mingw53_32bin

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

    После этого программа будет готова к распространению и можно приступать к созданию инсталлятора или просто упаковать приложение вместе со всеми библиотеками, например, в zip архив.

    Библиотеки для приложения следует копировать именно из папок mingw, а не QtCreator. В последнем случае программа будет укомплектована библиотеками, которые предназначены только для QtCreator и, как следствие, может в итоге оказаться неработоспособной.

    Источники:

    Запуск Qt приложений .exe вне Qt Creator

    Запуск (сборка) приложения Qt для Windows XP

    Готовим приложение на Qt к работе на другом компьютере

    Читать еще:  Для детей подруги открытка божья коровка сделать
  • Ссылка на основную публикацию
    Статьи на тему: