qtcreator - exe отлично работает внутри qtcreator, но не снаружи

Я хочу подарить своему другу релизную сборку небольшого проекта. Он отлично работает при запуске из qtcreator, но не открывается при двойном щелчке по файлу .exe. Это даже не дает мне сообщение об ошибке.

Теперь, когда я попытался скопировать несколько файлов Qt .dll (например, Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll) рядом с моим exe-файлом, это ничего не изменило. Как я могу узнать, какие зависимости есть у моего проекта? Файл .pro мало что мне говорит

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = project1
TEMPLATE = app


SOURCES += main.cpp\
    mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

Я работаю над Windows 7 (64-разрядная), Qt Creator 2.6.1 на основе Qt 5.0.0 (32-разрядная)

спасибо за любую помощь Садик

редактировать: решение можно увидеть в моем ответе


person Sadik    schedule 26.01.2013    source источник
comment
Запустите его из консоли, чтобы увидеть потенциальные ошибки, проверьте technet.microsoft.com/ en-us/sysinternals/bb896647.aspx . Используйте обходчик зависимостей (dependencywalker.com) для проверки зависимостей DLL. Убедитесь, что в целевой системе установлена ​​среда выполнения MSVC или mingw. (В зависимости от того, какой компилятор вы используете).   -  person Frank Osterfeld    schedule 26.01.2013
comment
При запуске из консоли ничего не происходит. Я использую MSVC. Возможно ли, что выпуск работает в qtcreator без правильной установки MSVC? Использование dependencywalker дает мне сообщение об ошибке рядом с gpvcs.dll: Предупреждение: по крайней мере один модуль зависимостей отложенной загрузки не найден. Предупреждение. По крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в зависимом от отложенной загрузки модуле.   -  person Sadik    schedule 26.01.2013


Ответы (4)


Решил! Все, что мне нужно было сделать, это загрузить "libEGL.dll" и поместить его в каталог, где находится мой исполняемый файл. Конечно, все остальные файлы .dll из qt тоже были необходимы. Но они были явно упомянуты в сообщении об ошибке. Но для "libEGL.dll" нет даже сообщения об ошибке. Файлы .dll, перечисленные в «зависимом обходчике», можно игнорировать. Для моей проблемы этот инструмент не очень помог. В нем не указана libEGL.dll, но перечислены другие файлы .dll, которые на самом деле не используются.

person Sadik    schedule 27.01.2013
comment
Вам не нужно загружать эти библиотеки DLL. Они должны находиться в каталоге Qt bin. Обычно C:\Qt\Qt5.0.0\5.0.0\msvc2010\lib при использовании установщика VS 2010. - person Wiz; 27.01.2013

How can I know what dependencies my project has?

Вы можете использовать программу Dependency Walker с официального сайта, чтобы узнать, какая dll нужна вашей программе.

NB Используйте библиотеки Qt той же версии (если вы используете Qt5, найдите свои библиотеки DLL в каталоге Qt5 bin и т. д.).

person tro    schedule 26.01.2013
comment
Dependency Walker выдает ошибку рядом с gpvcs.dll: Предупреждение: не найден по крайней мере один модуль зависимостей с отложенной загрузкой. Предупреждение. По крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в зависимом от отложенной загрузки модуле. У меня есть только gpvcs.dll для 64-битной версии. Если я скопирую его в каталог, где находится мой исполняемый файл, он выдаст мне то же сообщение об ошибке для SYSNTFY.DLL. - person Sadik; 26.01.2013
comment
После загрузки файлов x86 dll и помещения их в каталог я получаю только одно предупреждение в Dependency Walker: Предупреждение: по крайней мере один модуль имеет неразрешенный импорт из-за отсутствия функции экспорта в модуле, зависимом от отложенной загрузки. - Я по-прежнему не получаю никаких сообщений при нажатии на исполняемый файл - person Sadik; 26.01.2013

Поскольку вы говорите о Qt5, убедитесь, что у вас есть каталог platforms с по крайней мере qminimal.dll в нем в каталоге вашего файла program.exe. Они являются частью новых изменений, внесенных в Qt. (Возможно и qwindows.dll тоже).

Кроме того, убедитесь, что вы включили соответствующие библиотеки msvcr*.dll, если вы не компилируете их статически. Проверьте с помощью ходока зависимостей.

/myProgram.exe 
/Qt5Gui.dll
/Qt5Core.dll
/ .... (other DLLs you require)
/platforms/qminimal.dll
/platforms/qwindows.dll (Not always required)
person Wiz    schedule 26.01.2013

Какой компилятор вы используете? Вам необходимо связать файлы DLL времени выполнения для компилятора или попросить пользователя установить распространяемый пакет Microsoft Visual C++, если вы используете MSVC++.

person Daniel Hedberg    schedule 26.01.2013