среда, 2 сентября 2015 г.

Деплой простого C++/Qt приложения с виджетами на Windows

Собирал QtCreator + MinGW. Приложение содержало пару кнопочек и таймер. Сразу было понятно, что нужны используемые модули Qt:
  1. Qt5Core.dll
  2. Qt5Gui.dll
  3. Qt5Widgets.dll
Винда шутку не оценила, порекомендовала поискать еще рантайм GCC и libstd++
  1. libgcc_s_dw2-1.dll
  2. libstdc++-6.dll
В ответ на это ругалось ошибкой пикрелейтед ("Ошибка при запуске приложений (0x000007b). Для выхода из приложения нажмите кнопку "ОК" "). Гугл посылал куда-то в сторону windeployqt.exe, который помог чуть меньше, чем никак.
Удалось обнаружить недостающую dll-ку следующим способом: взял в руки Process Explorer из sysinternals, нашел процесс программы, запущенной (успешно) из QtCreator, нажать Ctrl+D (посмотреть загруженные DLL для процесса), отсортировать по Path и найти библиотеки, относящиеся к "C:/Qt/5.5/...". Недостающим звеном оказалась библиотека libwinpthread-1.dll (для POSIX threads под MS Windows).
Итого список модулей дистрибутива брутто:
  1. %YOUR_APP_NAME%.exe
  2. Qt5Core.dll
  3. Qt5Gui.dll
  4. Qt5Widgets.dll
  5. libgcc_s_dw2-1.dll
  6. libstdc++-6.dll
  7. libwinpthread-1.dll