Перейти к содержимому

Как сделать exe файл в qt creator

  • автор:

Qt 4.8.2. Как собрать исполняемый файл

Создал проект Desctop-калькулятор, написал код, ошибок при компиляции не выдает, из qtcreator запускается, работает нормально. Когда запускаю файл из build каталога, говорит, что не хватает каких-то dll Хочу сделать исполняемый exe, как его правильно собрать? Как запустить проект в режиме выпуска? Qt creator 2.6.2

Отслеживать

Konstantin_SH

задан 12 фев 2019 в 18:32

Konstantin_SH Konstantin_SH

2,892 2 2 золотых знака 21 21 серебряный знак 44 44 бронзовых знака

так как у Вас Qt 4.8, то в большинстве случаев просто скопируйте нехватающих dll. И будет готово.

Как запустить exe ве Qt Creator??

Запускаю скомпилированный exe. Появляется ошибка. нету dll файлов. Запускаю windeploqt добавляются нужные dll, но не все. Не хватает libgcc_s_dw2-1.dll. Беру ее из папки mingw/bin. И снова ошибка. не удалось найти точку входа.
В общем все на скриншотах. подскажите что сделать. И может. на каком то этапе я ошибся.
5bd41260aa14a012486398.png5bd4126b5f646803554695.png5bd41273c8a98502005420.png5bd4127cc9660477713927.png 5bd4128403046419876995.png

  • Вопрос задан более трёх лет назад
  • 1429 просмотров

Комментировать
Решения вопроса 1

Хорошая подробная и, что главное, рабочая инструкция.

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 1
Developer, ex-admin

1.Если по тупому, то запускайте софтину, она будет ругаться на отсутствие библиотеки, эту библиотеку ищите в недрах mingw копируете в каталог с исполняемым файлом. Повторяете процедуру до тех пор пока софтина не перестанет ругаться на отсутствие библиотек.

2.Чуть по технологичнее: берете dependency walker открываете им ваш исполняемый файл, смотрите от каких библиотек он зависит (в глубину то же нужно смотреть, а не только первый уровень) ищите и копируете библиотеки аналогично п.1.

3.По умному: прописываете путь mingw/bin в переменной окружения PATH и наслаждаетесь. При этом ничего копировать не придется.
Но если вы задумаете распространять ваш софт другим людям, это не избавит вас от необходимости устранять зависимости, т.е. вы все равно должны будете либо собрать все библиотеки в одном каталоге с исполняемым файлом, либо обязать пользователя устанавливать mingw и прописывать его путь в переменную PATH.

Запуск 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:\Qt\build-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:\Qt\5.12.0\mingw73_64\bin , а для Visual Studio D:\Qt\5.12.0\msvc2017_64\bin .

Перейти можно с помощью команды cd :

Командная строка в нужной папке

Скомпилируйте в режиме Release ваше приложение. Для примера я создал простое Qt Widgets Application и скомпилировал под MinGW компилятором:

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

Найдите папку, в которой находится скомпилированный EXE файл. Например, в моем случае это папка D:\Harrix\Projects\Qt\untitled\_build\release :

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

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

windeployqt D:\Harrix\Projects\Qt\untitled\_build\release 

Вызов команды 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:\Harrix\Projects\Qt\untitled\_build\release 

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

windeployqt --compiler-runtime --qmldir D:\Harrix\Projects\Qt\untitled D:\Harrix\Projects\Qt\untitled\_build\release 

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

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

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

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

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

Режим Debug

Переключение в режим Release

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

Запущенное приложение

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

Выбор компилятора при запуске приложения

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

Папка release

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

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

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

Нахождение DLL и других файлов

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

Найдите папку, в которую устанавливался Qt. У меня это папка C:\QtQt5.2.0

В ней найдите папку с номером версии вашего Qt. У меня это первая папка с названием 5.2.0-rc1 . У вас скорее всего будет немного по-другому называться (у меня сейчас beta версия стоит):

Папка Qt

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

Папка MinGW

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

Содержимое папки MinGW

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

Папка bin

И в этой папке находим нужные нам dll . Находим тут Qt5Core.dll (не Qt5Cored.dll . ) и копируем в папку C:\Qt\build-Example-Desktop_Qt_5_2_0_MinGW_32bit-Release\release (где наш *.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? Переходим в неё:

Папка Qt

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

Папка Tools

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

Папка QtCreator

В ней папка bin :

Папка bin

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

Папка скомпилированного приложения

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

Папка MinGW

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

Папка 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. Если вы используете какие то другие компоненты, например, QWebVie w, то вам будут нужны еще другие DLL, которые вы находите аналогичным способом.

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

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

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

Статья обновлена 2018

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

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

Harrix

  • GitHub User
  • [email protected]

Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.

Как сделать exe файл в qt creator

Устанавливаем ВЫБИРАТЬ «ВЫБРАТЬ ВСЕ ОБЯЗАТЕЛЬНО»

Скачиваем и устанавливаем perl и python.

Редактируем файл D:\Qt\Qt5.1.0\5.1.0\Src\qtbase\mkspecs\win32-g++\qmake.conf

Находим строчку QMAKE_LFLAGS =

Заменяем на QMAKE_LFLAGS = -static -static-libgcc

Открываем консоль (желательно открыть консоль в пуске в папке Qt, называется Qt 5.1.0 for Desktop (MinGW 4.8 32 bit))

Переходим в папку cd D:\Qt\Qt5.1.0\5.1.0\Src\qtbase

Создаём переменные среды (Проверяйте пути, они могут у вас отличаться)

set LIB=
set INCLUDE=
SET QTDIR=D:\Qt\Qt5.1.0\5.1.0\Src\qtbase
SET QMAKESPEC=win32-g++
SET PATH=C:\Python27;C:\Perl\bin;D:\Qt\Qt5.1.0\5.1.0\mingw48_3 2\bin;D:\Qt\Qt5.1.0\5.1.0\Src\qtbase\bin;%PATH%

проверяем пути на соответсвие нашим из установки Perl,Qt

Запускаем конфигурацию (принимаем лицензию, когда спросит (вводим y, нажимаем Enter))

configure.exe -debug-and-release -opensource -c++11 -static -opengl desktop -no-angle -no-vcproj

y соглашаемся с лицензией

mingw32-make.exe (Это может затянуться до часа)

Идет сборка пакетов

Заходим в Creator Инструмены -> Параметры

Профили QT Справа от комплектов. Добавляем C:\Qt\Qt5.3.1\5.3\SRC\qtbase\bin\qmake.exe по своему пути.

Добавляем новый Комплект. Называем статик.
Компилятор MinGW 32 bit
Профиль qt qt (Src)
Нажимаем определить.

Создаем новый проект в сборке указываем,наш комплект.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *