В одному з уроків з 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
Добавьте в статью, что если используется Qml следует делать так -
For windeployqt there is the option
--qmldir
.Спасибо, добавил
Тук-тук. Привет из прошлого! Не могли бы вы подробнее расказать о том, куда должна быть записана данная вставка "windeployqt --qmldir f:\myApp\sources f:\build-myApp\myApp.exe"? Я пробовал указать после пути распаковки .dll, но получаю ошибку.
f:\build-myApp\myApp.exe - это путь к .exe файлку, который я хочу открыть, я так понимаю, а первый что означает (f:\myApp\sources)? Это папка с релизом проекта или это папка с самим проектом (там где .pro-файл)? Заранее спасибо