2013-02-19 6 views
3

Я пытаюсь запустить программу TransitTalker.exe, который мой скомпилированный код из Qt, как показано на рисунке:Qt 5.0.1: Приложение не будет выполняться за пределами Qt Creator

https://www.dropbox.com/s/ypgklrm4uschri5/filecontents.png

(Обратите внимание, что у меня нет достаточной репутации размещать изображения, которые по этой причине я предоставил ссылку на изображение)

Моя проблема:

  • Моя программа не выполняется за пределами создателя qt.

  • Я получил следующее сообщение о попытке запустить TransitTalker.exe: «Это приложение попросило Runtime прекратить его необычным способом. Для получения дополнительной информации обратитесь в службу поддержки приложения».

Что я сделал уже:

  • Я добавил необходимый DLL (кроме GPSVC.dll и ieshims.dll). Я нашел требуемую DLL через программу, называемую зависимым ходоком.

  • Я убедился, что моя программа запускается внутри создателя qt без ошибок.

Мой главный вопрос: Почему я получаю это сообщение во время выполнения: «. Это приложение просил Runtime прекратить его необычным способом, обратитесь в службу поддержки приложения для получения дополнительной информации». Я хочу иметь возможность запускать свою программу TransitTalker.exe в качестве автономного приложения qt.

Запуск qt creator 5.0.1 (MINGW 47_32). У меня есть Visual Studio 2012 на том же компьютере.

+0

Обратите внимание, что файлы C++ и o из создаваемой программы –

+0

> Я нашел требуемую DLL через программу, называемую зависимым ходоком. Я предполагаю, что эти DLL либо встроенные в Windows библиотеки, либо библиотеки libs, созданные в среде MS Visual Studio. Вы создали свое приложение с MinGW. Двоичный код, предоставленный этими инструментами, несовместим друг с другом, поэтому вы получаете ошибки во время выполнения. QtCreator связывает правильные библиотеки MinGW при запуске приложения внутри него (поскольку он знает, что вы создали приложение с помощью инструментария MinGW) и Windows runtime связывает свои несовместимые библиотеки, что приводит к сбою приложения. – Dmitry

+0

DLL, который я нашел через хотлу зависимости, был в qt. Все, что я сделал, это скопировать dll в папку, где находится исполняемый файл. –

ответ

1

Я получил свое приложение для работы сейчас. См. Решение ниже о том, как я это сделал.

Дмитрий правильно, что MinGW GCC 4.7 является не совместимы с Qt 5.0.1, который я проверил через this post

Мое решение: Я установил Qt Creator 4.8 SDK, который использует MinGW GCC 4.4.Я смог запустить исполняемый файл приложения вне Qt Creator.

0

Я полагаю, что Qt имеет какой-то отказ от запуска при запуске (например, в конструкторе QApplication) и печатает сообщение в stdout (или stderr?), А затем, err, «завершение приложения в необычном путь".

Если это так, то вам нужно узнать, что говорит об этом сообщении об ошибке. Один из способов сделать это было бы добавить следующий код временно в верхней части основного():

AllocConsole(); 
freopen("conin$", "r", stdin); 
freopen("conout$", "w", stdout); 
freopen("conout$", "w", stderr); 

... затем перекомпилировать вашу программу и запустить его снова. Когда он запустится, появится окно оболочки MS-DOS, посмотрите его на любые информационные сообщения о том, почему Qt недовольна.

+0

Это сообщения, которые я получил после добавления вашего предложения: https://www.dropbox.com/s/3zabijtw2r8x4cf/debugmsg.txt –

+0

Также мой друг сказал мне, что мое приложение все еще находится в режиме отладки, что меня смущает причина Я в режиме выпуска. –

+0

Следующее, что я хотел бы сделать, это начать добавление fprintf (stderr, "x1 \ n") ;, fprintf (stderr, "x2 \ n"); и т. Д. В ваш main() и посмотреть, какие из этих фиктивных выходов отображаются в окне. Увидев, что представляет собой последняя строка вывода до того, как программа умрет, вы можете сузить место, где в коде возникает проблема. –

4

Я знаю, что это отмечено как решено, но у меня была та же проблема, и я решил ее, скопировав libEGL.dll из каталога двоичных файлов Qt. по какой-то нечетной причине он не появился в проверке зависимости, мне пришлось просмотреть длинный журнал отладки, чтобы узнать, какие библиотеки действительно загружены. (и это не в вашем изображении, так что, скорее всего, та же проблема)