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
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Дмитрий
Дмитрий03 лютого 2025 р. 06:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
NW
Nayo Wai30 січня 2025 р. 09:22
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
n
nkly03 січня 2025 р. 02:52
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
Marsel16 серпня 2023 р. 14:26
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.

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