2013-03-22 2 views
3

Вот контекст:Qt программа 5.0 работает в QtCreator, но не снаружи

  • Я разработал программу с Qt под Windows 7 x64.
  • Я обновил Qt 5.0.1, QtCreator 2.6.1, компилятор VS2010.

Теперь статус:

  • Моя программа прекрасно работает в QtCreator, но, когда я попробовал его на улице, я получил несколько ошибок.
  • Я проверил эту тему, которая дала мне ответы на некоторые вопросы: qtcreator - exe does work fine inside qtcreator but doesn't outside
  • , таким образом, я добавил Qt библиотеки DLL и не помогли, не более Недостающие Библиотеки сообщения.
  • Тем не менее, это не будет работать за пределами QtCreator (не больше сообщений об ошибках, я просто не работает), поэтому я добавил платформы каталог как с qminimal и qwindows DLLS, это не помогло.
  • Я также загрузил и добавил libEGL.dll как просил, без результата.

Я застрял и мог очень помочь.

+0

Какие ошибки вы получаете? Что говорит хормейстер зависимости от вашего «внешнего» QtCreator? –

+0

Во-первых, у меня были ошибки «пропавших dll», но, как я их добавил, у меня больше нет сообщения об ошибке, я просто ничего не делаю :( – Darkiwi

+1

это сбой во время запуска? –

ответ

2

Сайт Qt-проекта полон таких тем. Отслеживающие зависимости будут информировать только о компиляционных зависимостях времени. Существуют также DLL-файлы, которые динамически загружаются, вы не получите никаких ошибок, предупреждений или вообще ничего. Если вы используете запас строить библиотеки DLL (за исключением Qt5 * .dll), вы должны были бы следующие:

  • D3DCompiler_46.dll (иногда D3DCompiler_43.dll)
  • libEGL.dll
  • libGLESv2.dll
  • icudt49.dll
  • icuin49.dll
  • icuuc49.dll
  • платформы \ qwindows.dll (или что у вас установлена ​​ОС)

ПЛК DLL компилятора, в зависимости от того, какую конструкцию вы используете.

Вы можете значительно сократить зависимость, если вы создаете с поддержкой OpenGL рабочего стола вместо ANGLE и без веб-кита. Тогда вам нужен только плагин платформы и модули Qt, которые вы используете.

4

Эта проблема зависит от того, что ваша программа не может загружать свои зависимости, копировать файлы зависимостей (файлы DLL) в каталог приложений - это временный путь, это очень рискованный способ, с которым ваше приложение может столкнуться с проблемами на целевой машине, если на целевом компьютере не установлена ​​правильная версия Microsoft Runtime Library, приложение не может работать правильно, вы можете найти, какие зависимости (файлы DLL) вам нужны для вашего приложения с помощью Dependency Walker.

Есть два способа решить эту проблему:

Первой заключается в использовании Microsoft Visual C++ 2010 Runtime компоненты в InstallShield (или другая версия зависит от версии библиотеки времени выполнения скомпилирована с ним), что пользователь может установить его молча, или установить его исполняемый двоичный файл без использования installshield, а затем скопировать файлы DLL в каталог приложения и распространить его.

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

Для развертывания приложения на целевых машинах:

1) Поместите Microsoft Visual C++ 2010 Runtime библиотеку в папку приложения, так что пользователь будет установить его на своей машине.

2) Копирование приложения требуются зависимости (DLL files) из Qt's bin папки в папке приложения (путь bin папку: C:\Qt\Qt5.0.2\5.0.2\msvc2010\bin).

3) Скопируйте папку imageformats из папки Qt's plugins в папку приложения (если вы используете какой-либо файл ресурсов изображения в своем приложении).

4) Скопируйте platforms папку из папки Qt's plugins в папку с вашим приложением.

путь к папке плагинов Qt:. C:\Qt\Qt5.0.2\5.0.2\msvc2010\plugins\

+0

Зависимость ходок не обнаруживает зависимостей во время выполнения, только время компиляции. Вот почему вы не получаете никакой ошибки если плагин вашей платформы отсутствует. Приложение просто не запускается. – dtech

0

просто добавить файл qt.conf в каталог приложений следующего содержания

[Paths]

библиотек =/платформы

затем копировать в тот же каталог приложений, подкаталог «платформы», который вы можете найти в: C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin

Вот и все.

Это работает, потому что qtcore.dll скомпилирован с внутренними путями вашей установки qt. (Я не знаю почему!). Поскольку t.conf всегда считывается qtcore при запуске приложения, будут включены библиотеки на «платформах», и приложение будет работать на любом хосте.

Предупреждение: подкаталог qtcore и platform должен поступать из одной и той же установки qt.

+0

вы можете это уточнить? Где найти qt.conf? что такое каталог приложений? – Shachi