2015-10-22 3 views
1

Итак, у меня есть Visual Studio 2013 (версия сообщества) с установленной Qt addt, библиотеками Qt5 (32 бит), и я пытаюсь создать исполняемый файл, который не зависит от всех конфигураций разработки (он может используйте статические или общие библиотеки, на данный момент меня это не волнует).Проблемы с развертыванием приложения Qt5 на окнах

ОС: Windows 7, x64.

Для этого я изменил визуальную студию Solution Confguration с Debug до Release и добавьте все необходимые библиотеки в Configuration Properties -> Linker -> Input -> Additional Dependencies. Приложение теперь запускается, только если я запускаю его из визуальной среды IDE. Если я попытаюсь запустить его из сгенерированного .exe, то я получил The application was unable to start correctly (0xc000007b).

Я искал и нашел, что этот код ошибки указывает один из следующих проблем:

  • 32bit приложение пытается загрузить 64-битную DLL (не мой случай, я думаю, Qt библиотеки DLL являются 32bit (Я установил с помощью этого .exe: qt-opensource-windows-x86-msvc2013-5.5.0.), И я использую некоторые другие .DLL, которые также 32 бит).
  • . Некоторые недостающие библиотеки DLL. (Я скопировал все необходимые Qt DLL в той же папке с окончательным исполняемым файлом).

Для проверки того, что зависимостями мое приложение требует, я открыл файл .exe с Dependency Walker приложения, это то, что он показывает мне:

application dependencies

в этом списке были также Qt5Multimedia.dll и Qt5SerialPort.dll, я избавляюсь от ошибок, копируя .DLLs в той же папке с .exe.

Любые идеи, как это решить?

+0

Самостоятельные ответы приветствуются на SO. Но, пожалуйста, разделите вопрос и ответ. Вы можете отредактировать вопрос, чтобы он содержал только вопросную часть и отправлял решение в качестве ответа. В противном случае это будет выглядеть как открытый вопрос, а не как проблема. – Bowdzone

+0

@Bowdzone Сделано. Спасибо, что заметил меня. –

ответ

7

Вы никогда не должны выполнять эту операцию вручную, если стандартная процедура полностью не сработает. Существует уже стандартный инструмент для Qt Windows deploymend windeployqt.

Он заботится о Qt DLL зависимости, делает копию platforms\qwindows.dll, а также он делает копию библиотеки, которые вы не можете обнаружить с Dependency Walker, так как плагины изображений и некоторые другие загружаются во время выполнения.

Вам даже не нужно иметь вашу папку Qt bin в вашей среде PATH. Самое простое развертывание:

  • копия построена exe бинарных в новую папку
  • открытой cmd консоли в этой папке
  • вызов windeployqt используя полный путь (если он не в системе PATH) и предоставить исполняемый файл , например:
    c:\Qt\Qt5.5.1-vs2013-x64\5.5\msvc2013_64\bin\windeployqt.exe application.exe 
    

В результате у вас есть в этой папке все необходимые библиотеки Qt DLL. Конечно, у вас также могут быть проблемы с распространенными распространяемыми MSVC, но их следует развернуть отдельно и установить один раз для каждой системы.

Инструмент windeployqt имеет различные варианты. Он также может позаботиться о развертывании связанных файлов qml.

Только некоторые сторонние библиотеки должны быть скопированы вручную, если они используются, например OpenSSL.

+0

Это помогло с большинством моих библиотек, но являются ли 3D-модули исключением? Для меня «windeployqt», похоже, копирует библиотеки Qt3D, но в моем конечном приложении отсутствует все модули Qt3D QML. Предполагаю ли я иметь дело с модулями QML отдельно? – Matt

1

Решение:

Как я глубже, я нашел this ответ, после того, как делать то, что ответ показывает (я на самом деле скопирована все .DLLs находится в \Qt5.5.0\5.5\msvc2013\bin к папке, где мой .exe находится), то сообщение об ошибке изменилось с The application was unable to start correctly (0xc000007b) на Application failed to start because it could not find or load the QT platform plugin “windows”.

Поиск по сети больше об этой ошибке, я нашел из this ответа, который вы также должны папку platforms в том же месте, с .exe (который находился в Qt5.5.0\5.5\msvc2013\plugins пути). После копирования этой папки приложение началось без проблем !!!

Теперь мне просто нужно удалить все ненужные .DLLs из папки моего приложения (Dependency Walker не предлагает очень полезную информацию об этом), и все развертывание завершено.

Я решил проблему в то же время, что и ее описание, поэтому, я думаю, я просто оставлю это здесь, может помочь другим, у которых есть та же проблема.

+1

Это было единственное решение, которое помогло ... Спасибо: D – Shachi

Смежные вопросы