170 Мб Hello World -> Развертывание приложений с помощью Qt - PullRequest
7 голосов
/ 09 сентября 2010

Я новичок в Qt, но без проблем в C ++. Я использовал Qt Creator и сделал простую программу с кнопкой (как hello world), затем я создал проект. Я не смог запустить исполняемый файл в самих окнах (за пределами создателя), потому что ему нужны были следующие DLL-файлы:

libgcc_s_dw2-1.dll
mingwm10.dll
QtGuid4.dll
QtCored4.dll

Я нашел эти файлы и положил их рядом с exe. Теперь программа работает, но папка имеет размер 170 МБ из-за файлов big Dll. Это способ развертывания приложений Qt. Я знаю, что это способ создать автономное статическое приложение, но это не проблема. Я в порядке с DLL, но зависимости кажутся слишком большими. Есть ли другой способ развертывания проектов с меньшими размерами файлов?

Спасибо

Ответы [ 3 ]

19 голосов
/ 09 сентября 2010

Почему бы вам не сделать сборку релиза и не использовать библиотеки релизов вместо библиотек отладки, которые намного больше.

Поскольку это касается размера:

Библиотеки отладки

QtCored4.dll = ~ 37 МБ

QtGui4d.dll = ~ 157 МБ

Выпуск библиотек

QtCore.dll = ~ 2,3 МБ

QtGui4.dll = ~ 9MB

(по размеру в моем каталоге Qt \ version \ bin)

3 голосов
/ 09 сентября 2010

у вас есть две проблемы здесь:

  • «Точка входа в процедуру не найдена»: у вас установлено несколько версий библиотек Qt. Нехорошо. Вы ссылаетесь на библиотеку импорта A, в то время как во время выполнения ваш исполняемый файл находит dll B, а не ту, с которой вы связались. Проверьте выходные данные вашего проекта при компоновке, чтобы увидеть, какую библиотеку импорта использует VS. Самое простое решение: удалить / удалить все, что связано с Qt, и начать заново. Настройте параметры своего проекта аналогичным образом.
  • не находит dll во время выполнения: решение состоит в том, чтобы добавить каталог с qt dll в вашу PATH
2 голосов
/ 09 сентября 2010

Если вы планируете развертывать статически связанную версию приложения Qt, вам следует рассмотреть возможность создания пользовательских версий библиотек, в которых вы отключаете все функции , которые вам не нужны, минимизируя таким образом размер библиотек..

...