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
AD

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

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

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

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

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

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов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 аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 06:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 03:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

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