| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT4] переносимость программ |
| Автор: CuteBunny 28.5.2008, 14:55 |
| Блин, собрал релизную версию программы, запихнул в корневую папку только нужные dlls, пытаюсь запустить на другой машине... "Ошибка в программе - отправить отчет и т.д. и т.п."??? В чем дело? |
| Автор: JackYF 28.5.2008, 15:35 |
Собери дебаг-версию программу и запусти из консоли. Добавлено через 25 секунд 99%, что дело в косяке в твоей программе, который нужно выявить. |
| Автор: Любитель 30.5.2008, 12:10 | ||
Добавлено через 2 минуты Небольшая поправка - в винде все дебажные сообщения выводятся не в stdout/stderr, а с помощью DebugOutputString. То есть в консоле мы ничего не увидим. Либо с дебаггера, либо есть какая-т утила (точно уже не помню) от SysInternals, которая перехватывает дебажные сообщения. |
| Автор: SABROG 30.5.2008, 12:51 | ||
Поправочка. Добавляем в .pro файл "CONGIF += console" и все видим. |
| Автор: CuteBunny 2.6.2008, 16:48 |
| Добавил в pro файл строку CONFIG += console, теперь выскакивает консоль, там ничего не пишется, консоль потом быстро исчезает... Прочитал в assistant'e статью Deploying QT Applications, вроде шел по инструкциям, кинул нужные библиотеки, добавил в pro файл строку CONFIG -= embeded_manifest_dll - чтоб плагины работали на чужих машинах, добавил msvcr80.dll & msvcp80.dll правда в папке Visual C++ EE 2003 их не нашел, нашел в папке SDK, все равно не работает... Правда надо было еще скопировать папку <Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC80.CRT, но у меня ее нет вообще... Походу пора переходить на mingw... Добавлено через 1 минуту и 20 секунд Кстати, также пробовал запустить экзамплы на другой машине, таже ерунда...?... |
| Автор: CuteBunny 2.6.2008, 16:56 |
| Хмммм... Как лечится тогда?... |
| Автор: SABROG 2.6.2008, 17:04 | ||
А в программе точно нет ошибок ? У меня бывают "на ровном месте", когда какой-нибудь файлик изменю, а компилятор не перекомпилирует объектник. Приходится clean делать и собирать снова. Еще с дллками косяк у меня был, на двух тачках XP и 2000 две Qt собранные на каждой. Если перемещать .exeшник между тачками, не смотря на то, что на каждой есть .dll файлы, программа крашится. |
| Автор: Любитель 2.6.2008, 17:08 | ||
Рантайм для VC++ распространяется в виде отдельного пакета. Уже много раз обсуждалось - здесь это не в тему. Опиши последовательно твой процесс деплоймента Кстати, некутешные проекты на VC++ работают? |
| Автор: just_geek 3.6.2008, 11:19 | ||||||
Вообще-то это для плагинов, а не для твоего проекта. К примеру если ты используешь sqlite, то должен его перекомпилировать с этой опцией.
Я так и не понял какая версия Visual C++ у тебя? если 2003, то он называется по другому - Visual C++ Toolkit 2003 (это бесплатный компилер, без IDE к тому же). Если такая версия, то искать нужно mvcr71.dll & msvcp71.dll.
Не обязательно, можно из папки <Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VCх0.CRT скопировать все файлы включая манифест, в папку с программой и все будет работать. Сам так делаю, и все прекрасно работает. |
| Автор: Любитель 3.6.2008, 12:07 | ||
Я знаю |
| Автор: CuteBunny 3.6.2008, 13:47 |
| VC++ 2005 Express Edition, ошибся В папку release с экзешником кидаю QtCore4.dll, QtGui4.dll, QtSql4.dll (бд прога, sqlite движок), дальше, копирую из папки SDK, msvcr80.dll, msvcp80.dll, вот вроде и все... в pro файле следующие строки: QT += sql CONFIG += release CONFIG -= debug CONFIG += console CONFIG -= embeded_manifest_dll и т.д. qmake -o Makefile MyProject.pro nmake |
| Автор: Любитель 3.6.2008, 14:05 | ||
Не всё. Про манифест рантайма забыл. |
| Автор: CuteBunny 3.6.2008, 17:15 |
| манифест рантайма? у меня там лежит манифест от проги, вылез после nmake'a... оно? я нуб в этом пока что |
| Автор: Любитель 3.6.2008, 17:50 |
| Microsoft.VC80.CRT.manifest. Расположен в %VSDIR%\VC\redist\x86\Microsoft.VC80.CRT |
| Автор: CuteBunny 5.6.2008, 11:40 |
| Поставил себе нормальный Visual Studio 2005 prof, пересобрал проект, добавил в папку release msvcm80.dll msvcp80.dll msvcr80.dll QtCore4.dll QtGui4.dll Microsoft.VC80.CRT "Ошибка не отправлять отчет и т.д. и т.п." Но потом взял один из примеров qt, sdi, также кинул в папку release'а все вышеперечисленное, и работает на другом компе, короче, проблема точно где-то в самой моей программе, точно не знаю... Возможно, что памяти не хватает? В проге почти все объекты создавал динамически, машина на которой пытаюсь запустить свою тестовую прогу имеет памяти в 128 метров, стоит windows xp? Еще раз попробую вариант с console'ю, чтобы найти причину... |
| Автор: CuteBunny 5.6.2008, 12:00 |
| Теперь консоль выдала ошибку о том, что я пытаюсь задействовать сигнал у объекта, которым он не обладает |
| Автор: rainbow86 5.6.2008, 13:29 |
| CuteBunny, попробуй http://www.dependencywalker.com/depends22_x86.zip на машине где не запускается. Прога исследует все зависимости, может поможет! |
| Автор: CuteBunny 5.6.2008, 13:41 |
| Да я смотрел через dependency walker (QtCore4.dll, QtGui4.dll, QtSql4.dll, MSVCR80.dll и т.д.), вроде сейчас все должно заработать, но теперь не грузится sql driver... ПРОЧИТАЛ ВЕТКУ ПРО симптом driver not loaded, в pro. файле указал, шоб CONFIG -= embed_manifest_dll только вот вопрос, куда кидать сам драйвер sqlite'а? на C:/QT/plugins на машине без QT'а? прочитал в assistante про то, что можно как-то создавать qt.conf файлы, как-то через него можно сделать прогу более удобной... Кто создавал qt.conf'ы поделитесь опытом Добавлено через 8 минут и 38 секунд Все, точно, плагин qsqlite4.dll надо было кидать в ту же папку на машине без qt, где она лежит на машине, где есть qt и конечно не забыть про CONFIG -= embed_manifest_dll Программа успешно загрузилась на другой машине без QT Но вопрос про qt.conf еще остается |
| Автор: Любитель 5.6.2008, 16:42 |
| qt.conf кидается в папку с приложением (речь про винду). Это ини-файл, в секцию Paths кидаются настройки путей (те же Plugins). |
| Автор: CuteBunny 5.6.2008, 16:59 |
| блин, достаточно было прочитать ассистанта, но все равно спасибо тема закрыта |