Evgenii Legotckoi
Evgenii Legotckoi07 березня 2016 р. 10:52

Qt WinAPI - Урок 003. Як використовувати windeployqt для збору всіх DLL?

В одному з уроків з Qt вже було показано, як зібрати всі DLL , що застосовуються в проекті для підготовки програми до використання на інших ПК, що працюють під управлінням ОС Windows , а тепер пропоную ознайомитися з утилітою, яка постачається разом із Qt . Ця утиліта називається windeployqt і є консольною програмою, яка, як правило, йде в поставці з компіляторами MinGW або MSVC.

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

Утиліта windeployqt розташовується в папці bin , яка в свою чергу розташовується в папці компілятора для Qt. Таким чином, шлях до папки може бути наступним:

  • для MinGW - C:\QT\5.5\mingw492_32\bin\windeployqt.exe
  • для MSVC - C: \ QT \ 5.5 \ msvc2013 \ bin \ windeployqt.exe

Робота з windeployqt

А тепер приступимо до роботи з windeployqt . Допустимо, у Вас вже є скомпільований виконуваний файл і потрібно зібрати всі необхідні для його роботи DLL. Для цього зробимо невелику підготовку і перекинемо файл, що виконується, в підготовлену для збору папку. Я використовую для демонстрації проект EColor , який написаний з використанням MinGW. Виконуваний файл проекту буде розміщено наступним шляхом D:\EColor\EColor.exe.

Після чого необхідно буде відкрити консоль ( *cmd * ), і перейти в консолі в папку з windeployqt. Далі запускаємо утиліту передавши їй шлях розташування виконуваного файлу, як показано на нижченаведеному малюнку.

Після цього утиліта збере всі необхідні для роботи файлу DLL-ки. А виглядатиме це таким чином.

Можливі помилки

Також варто відзначити, що не все може пройти досить гладко. Наприклад, windeployqt, може не знайти бібліотеки компілятора gcc і видати таку помилку:

Cannot find GCC installation directory. g++.exe must be in the system path.

Це лікується прописуванням в змінних середовищах шляху до папки bin, яка містить GCC і відповідні бібліотеки.

Для цього йдемо за таким напрямком (приклад для ОС Windows 7 ):

*Панель Управління / Система / Додаткові параметри системи / Змінні середовища *

Після чого додамо змінну PATH до системних змінних, де будуть прописані шляхи до GCC та його бібліотек. У моєму випадку це виглядало так:

  • Ім'я змінної: PATH
  • Значення змінної: D:\AndroidQT\QT\5.5\mingw492_32\bin;D:\AndroidQT\QT\Tools\mingw492_32\bin;%PATH%

Після цього рекомендую перезавантажити ПК. Після цього помилка повинна зникнути, а відповідні бібліотеки повинні будуть підтягнутися до папки з виконуваним файлом.

Файли, які можуть бути не зібрані windeployqt

Також деякі файли можуть бути не зібрані за допомогою windeployqt , що варто також врахувати та протестувати програму на іншому ПК перед випуском.

Наприклад при збиранні DLL для EColor, windeployqt все-таки пропустила такі файли:

  • LIBEAY32.dll
  • MSVCP90.dll
  • MSVCR90.dll
  • MSVCR120.dll
  • ssleay32.dll

Якщо проект з використанням QML

UPD 19.11.2018 від alex_lip :

Якщо в проекті використовується QML, необхідно додати спеціальну директиву --qmldir

Ця директива повинна буде вказати, звідки брати вихідні QML.

windeployqt --qmldir f:\myApp\sources f:\build-myApp\myApp.exe

Відеоурок

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

alex_lip
  • 19 листопада 2018 р. 07:32

Добавьте в статью, что если используется Qml следует делать так -


For windeployqt there is the option --qmldir .

windeployqt --qmldir f:\myApp\sources f:\build-myApp\myApp.exe


Evgenii Legotckoi
  • 19 листопада 2018 р. 12:53

Спасибо, добавил

А
  • 09 липня 2022 р. 12:32
  • (відредаговано)

Тук-тук. Привет из прошлого! Не могли бы вы подробнее расказать о том, куда должна быть записана данная вставка "windeployqt --qmldir f:\myApp\sources f:\build-myApp\myApp.exe"? Я пробовал указать после пути распаковки .dll, но получаю ошибку.

C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin>windeployqt.exe c:\p\untitled.exe windeployqt --qmldir ...

f:\build-myApp\myApp.exe - это путь к .exe файлку, который я хочу открыть, я так понимаю, а первый что означает (f:\myApp\sources)? Это папка с релизом проекта или это папка с самим проектом (там где .pro-файл)? Заранее спасибо

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Дмитрий

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:60бали,
  • Рейтинг балів-1
Дмитрий

C++ - Тест 003. Условия и циклы

  • Результат:92бали,
  • Рейтинг балів8
d
  • dsfs
  • 26 квітня 2024 р. 04:56

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
Останні коментарі
k
kmssr08 лютого 2024 р. 18:43
Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко05 лютого 2024 р. 01:50
Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 грудня 2023 р. 10:30
Boost - статичне зв&#39;язування в проекті CMake під Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 грудня 2023 р. 08:38
Boost - статичне зв&#39;язування в проекті CMake під Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik18 грудня 2023 р. 21:01
Qt/C++ - Урок 056. Підключення бібліотеки Boost в Qt для компіляторів MinGW і MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Тепер обговоріть на форумі
G
George1307 травня 2024 р. 00:27
добавить qlineseries в функции в функции: "GPlotter::addSeries(QString title, QVector &arr)" я вызываю метод setChart(...), я в конструктор передал адрес на QChartView элемент
BlinCT
BlinCT05 травня 2024 р. 05:46
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
PS
Peter Son03 травня 2024 р. 17:57
Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
Evgenii Legotckoi
Evgenii Legotckoi02 травня 2024 р. 14:07
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
IscanderChe
IscanderChe30 квітня 2024 р. 04:22
Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…

Слідкуйте за нами в соціальних мережах