Как развернуть приложение на Qt на другой Windows машине?

361
15 декабря 2016, 16:13

Как правильно проинсталировать на другом компьютере программу с ОС Windows, написанную на Qt C++? Проект в Qt Creator. Делаю релиз. Через запуск из Qt Creator проект запускается. Если через проводник зайти и открыть приложение в папке release, то возникает ошибка: отсутствует QtCore4.dll. Допустим, я PATH пропишу, на моем компьютере найдется, но клиенту же не скажешь, прописывайте ручками библиотеки. Вот интересует вопрос именно развертывания приложения под Windows.

Если есть статьи на эту тему, буду рад и такому ответу, с удовольствием почитаю.

Answer 1

У вас есть два варианта:

  1. Поставлять вместе с программой все необходимые dll'ки Qt. В первую очередь Windows ищет библиотеки в папке с программой, поэтому достаточно будет положить их туда. Вариант достаточно громоздкий - совсем недавно я написал небольшое приложение на Qt Widgets (размер exe'шника около 700 КБ), которое потянуло за собой 60 МБ Qt'шных библиотек.
  2. Слинковать все необходимые библиотеки Qt с вашим приложением статически. То же приложение разрослось с 700 КБ до 10 МБ, однако сил и времени на статическую линковку ушло уйма (чего стоит только перекомпиляция Qt из исходников!).
Answer 2

Статьи есть. Там в конце есть раздел The Windows Deployment Tool. Я им никогда не пользовался, попробуйте возможно годная штука. Обычно все библиотеки просто складываю рядом с исполняемым файлом. И конечно dependencywalker вам в помощь, хотя он не всё может определить.

Answer 3

Я обращался с подобным вопросом к производителю. Ответ примерно такой:

  1. Купить лицензионную версию, котороая позволяет необходимую информацию (подчёркиваю, что не всё содержимое библиотек, а только необходимую информацию) поместить в *.exe - файл. Мои предложения:
  2. Свободно распространяемая версия Qt предполагает распространять и родных *.dll. Сделайте свой инсталятор и включите туда необходимые библиотеки (кстати, в сети такие уже есть).
  3. На одном из форумов встречал советы, как "переделать" Qt, чтобы он включал в *.exe содержимое библиотек. Это возможно, но, во-первых, это нарушает лицензию, и к Вам производитель может предъявить иск, а во вторых, размер исполняемого файла в этом случае становится больше на размер используемых библиотек (вместо, допустим, 500 КБ будет "весить" 40-50 МБ).
READ ALSO
Абстрактные классы

Абстрактные классы

У меня есть абстрактный класс GeometryObjects и три класса наследника Point (точка), Line (2 точки), Polyline (список точек)Я создал список геометрических объектов:

230
Связанные списки/linked lists

Связанные списки/linked lists

Изучаю сейчас самостоятельно связанные списки СКто-нибудь может сказать, почему, несмотря на то, что в последнем цикле while я вывожу лишь l1, l2 каким-то...

199
Получение полного пути к процессу по ID

Получение полного пути к процессу по ID

Имею ID процесса, отсюда могу найти его хендл, нужно найти полный путь к файлу, пока из примеров Майкрософт удалось только получить название...

264
Вставка кода Assembler-a

Вставка кода Assembler-a

Мне необходимо выставить значение 0xFFFE по адресу 0x80002040, я написал для этого такой код:

614