2015-11-10 2 views
1

Я пытаюсь развернуть приложение QT5.4.1 в Windows 7 - x86.Ошибка развертывания QT

Как всегда, все работает нормально на моей машине, но не в машине конечного пользователя.

Когда я пытаюсь запустить приложение, оно дает мне следующую ошибку:

enter image description here

После поиска в Интернете, большинство решений говорят, что мне нужно добавить платформы папки, содержащие некоторые библиотеки DLL (qminimal , qoffscreen и т. д.) в пакет развертывания. Я пробовал это без успеха.

Самое смешное, что я скопировал QT папку установки для конечного пользователя машины и удалил все кроме этой папки (C: \ Qt \ Qt5.4.1 \ 5.4 \ msvc2012_opengl \ Plugins \ платформ) и она отлично работает.

Итак, как-то мое приложение ищет папки платформ в папке установки QT вместо папки пакета развертывания.

Кто-нибудь знает, как его решить?

EDIT: Мне удалось изменить все версии QT Dll на версию выпуска (без «d» sufix). Однако, когда я компилирую свой проект, я все равно получаю некоторые dll vC++ в режиме отладки. Я проверил все конфигурации проектов в разделах «linker» и «c/C++», и все они используют конфигурации «выпуска». Когда я запускаю программу, она дает мне «утверждение об отладке». Почему я получаю отладочные версии dll vC++?

Вот зависимость ходок скриншот

dependecy walker

+0

Вы пытались добавить /platforms/qwindows.dll вместо /plugins/platforms/qwindows.dll? – Mezzo

+0

Да, я попробовал ... :-( – guilhermecgs

+1

Я бы рекомендовал использовать Dependency Walker на машине пользователя, чтобы определить, какие DLL отсутствуют: http://www.dependencywalker.com/ – RedOctober

ответ

0

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

Мой выход проекта - это DLL с графическим интерфейсом, созданным в QT.

Другая программа вызывает эту DLL, и в течение DLL_PROCESS_ATTACH создается QT GUI.

Согласно documentation, QT ищет плагинов в:

in the directory containing the application executable, i.e. > QCoreApplication::applicationDirPath() + QDir::separator() + "qt.conf"

Вот почему QCoreApplication :: applicationDirPath() не является каталогом развертывания, где находится DLL, но каталог, где работает внешняя программа * .exe. Я думаю, что QT ищет файл qt.conf в этом месте * .exe

EDIT: нет ничего общего с отладкой или выпуск версии

1

Замечание Mezzo кажется очень актуальным. Мы регулярно размещаем коммерческие приложения Qt Windows. Вы можете использовать зависимый ходок для поиска зависимостей или просто дважды щелкнуть по исполняемому файлу и посмотреть на жалобу Windows о том, что dll отсутствует. Просто скопируйте их в место развертывания, желательно с помощью сценария qmake.

Сплав плагина сложнее иметь дело. Они не отображаются как зависимости.Операционная система может жаловаться на их отсутствие (например, dll, расположенные в поддирельных платформах), или ваше приложение может просто не использовать свою функциональность (например, dll в поддире «imageformats») без каких-либо претензий. Чтобы защитить себя от последнего случая, вам необходимо тщательно протестировать приложение.

Windows не нуждается в файле qt.conf. Просто создайте поддиры «платформы», «imageformats», ... в каталоге приложения и скопируйте там плагин dll. В качестве примера я показываю полное содержимое (mingw) dir приложения, которое даже при копировании на виртуальную машину запускается без каких-либо проблем.

snapshot of content of a deployed Qt Windows application

Qt5Btc1.dll наша собственная длл.

+0

Я решил проблему. Мой выходной файл не exe, а DLL. Внешняя программа использует эту DLL. Таким образом, рабочая папка не является папкой DLL, а внешней папкой программы. См. Https://forum.qt.io/topic/60534/error-deploying-qt5-4-1-in-windows-x86/2 – guilhermecgs

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