Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT 4] Проблема переноса программ на другие ПК


Автор: Moby 26.1.2009, 15:41
Всем привет! Как многие уже поняли, из большого кол-ва созданных мною тем, я пишу в Visual Studio.

Проблема не загрузки картинки, когда в *.load() указываешь правильный адрес, почти решена. Надо специальные модули с собой таскать.

Теперь возникла такая ситуация.

Дома есть два ПК. На одном ХР, .Net 3.5, пишу на Visual Studio, там все запускается. 
На втором ПК где есть Vista, и если не ощибаюсь в Viste уже есть .Net 3.5, все так же нормально запускаеться, ну кроме загрузки рисунков.

Теперь, когда запускаю на других ПК, где нет либо Vista, либо .Net 3.5 прога не запускается.

"Причём тут .Net" - я подумал, ведь не на C# пишу. Потом подумал, что может это из-за среды разработки зависит. Ведь в моём случае я как раз использую Microsoft среду.

А теперь внимание, два вопроса.  smile 

1 - Я правильно установил причину не запускания проги(из-за .Net 3.5)?

2 - Какую тогда использовать среду разработки? Дайте плиз ссылочку или хотя бы точно что нужно, ну там название, версия.... QDevelop или Eclipse или QCreator решат мою проблему кроссплатформености?

Автор: ecspertiza 26.1.2009, 15:59
Цитата(Moby @  26.1.2009,  15:41 Найти цитируемый пост)
1 - Я правильно установил причину не запускания проги(из-за .Net 3.5)?


я думаю это не из-за .Net, что то слышал что если пишешь на VisualStudio то надо какието её dll-ки тоскать как и в случае с MinGW но неуверен точно, это скорее не из за среды которую используешь а из-за компилятора который исопльзует среда разработки.
 

Цитата(Moby @  26.1.2009,  15:41 Найти цитируемый пост)
2 - Какую тогда использовать среду разработки?


это дела вкуса попробуй все, оставь что понравится, я слышал что ещё можно NetBeans использовать, но опять же неуверен сам непробовал, я использую eclipse и иногда QDevelop, для маленьких приложений.

Автор: pan2004 26.1.2009, 17:07
1. NET тут совершенно не при чем. Во первых, убедись, что ты пытаешься переносить Release, но никак не Debug версию(дебаг версии библиотек(любых) как правило отсутствуют на компьютере обычного юзера и оч много весят). В случае C++ программы надо таскать за собой так называемый CRT(C(++) Runtime Library), обычно в виде длл(у микрософта это типа MSVCRT*.dll). Это зависит от компилятора. Однако, тк VStudio достаточно популярная среда разработки, какие-то версии этой длл всегда есть на компьютере Windows пользователя(сам сказал, что под Вистой все идет). Естественно, если длл старой версии, то работать не будет, придется тащить свою(и копировать при надобности в windows/system32).
Что можно сделать: а) посмотреть какие длл нужны программе, с помощью например dependency walkerа.
б) слинковать CRT статически - см опции проекта. В таком случае длл тащить за собой не надо будет.

2. Что ты перечислил, это все IDE, к кросплатформенности самих создаваемых приложений не имеющие ни малейшего отношения.
Например, их можно спокойно настроить для работы с майкрософтовским компилятором.
Для "кросплатформенности" надо по меньше использовать всякие расширения компилятора, и выбирать gcc(of course smile под Win это будет MinGW/Cygwin), или icc(имеется по меньшей мере версии под Вин и Линух). Но это компиляторы(те по сути консольные утилиты без всякого ГУИ), и второй насколько мне известно, спокойно интегрируется в Visual Studio. Под первый можешь выбрать любую из перечисленных тобой ИДЕ - они отличаются друг от друга только степенью паршивости smile (я не говорю, что есть чтото лучше, но, честно, ни одна из них далеко не идеал) и внешним видом.

Автор: ecspertiza 26.1.2009, 17:36
pan2004 +1 smile , хорошо сказал.

Автор: Acer 26.1.2009, 19:33
У меня с gcc нет никаких проблем... XP, Vista - везде работает. Так что и Вам советую smile 

Автор: pan2004 26.1.2009, 23:42
Цитата(Acer @  26.1.2009,  19:33 Найти цитируемый пост)
У меня с gcc нет никаких проблем... XP, Vista - везде работает. 

Как сказать. А вот Qt::phonon не работает) нигде.
Да и какая разница, тащить за собой микрософтовскую CRT или еще и mingwm10.dll в придачу(от первой можно избавится, а вот вторую не слинкуешь статически)? Одна длл..

Автор: Moby 27.1.2009, 15:38
Спасибо за ответы.

Я понимал, что дело конечно в компиляторе, а не в среде, но как я думал среда использует конкретный компилятор, вот и думал, что может от этого зависит, что мол Visual Studio использует что-то не то.

Программку я соответственно делаю релизной версией.

Первое что я попробовал, это потаскать за собой все MSVCRT*.dll. На ПК(в папке windows) нашёл несколько MSVCRT*.dll. Все их впихнул в папку с релиз версией. И оказалось, что они уже там были, ну большинство из них, только не видны были. Это не помогло.

Теперь буду пробовать с gcc и icc.

Вот тут возникает вопрос, а точнее пару. 

Какой из них подходит для Visual Studio, как я понял icc?

И как интегрировать их\его в Visual Studio?

Автор: ecspertiza 27.1.2009, 16:32
Понимаешь студия здесь непричём, ты можешь компилить и из командной строки. Попробуй использовать gcc. Хотя это дело на любителя.

Автор: Любитель 27.1.2009, 16:38
Цитата(Moby @  27.1.2009,  15:38 Найти цитируемый пост)
Первое что я попробовал, это потаскать за собой все MSVCRT*.dll. На ПК(в папке windows) нашёл несколько MSVCRT*.dll. Все их впихнул в папку с релиз версией. И оказалось, что они уже там были, ну большинство из них, только не видны были. Это не помогло.

Если студия 2005 или выше, то это и не поможет. Уже ни раз писал в форуме по VC++. Если одним словом, надо таскать не длл-ки, а пакет VC++ 200x Runtime Redistributable. Он есть на диске со студией, например точно. И (при полной установке) в папочке со студией где-то тоже. Ну и, в конце концов, на сайте MS.

Автор: Moby 27.1.2009, 17:32
Любитель, помогло.

Только вот такой вопрос. Папку я не нашел. Я просто на другом ПК поставил VC++ 2008 Runtime Redistributable и все заработало.

Где эта папка лежит?

Но в целом это дело не решает, ну в моем понимании. Мне надо, что бы после компиляции релиз версии я мог смело дать кому угодно папку, ну запихнув предварительно нужные qt *.dll и модули. Как мне это сделать? 

Наверно надо "копать" в сторону компилятора. Объясните как мне интегрировать в Студию нужный компилятор и где его скачать?

Автор: Любитель 27.1.2009, 17:37
Нет. Если не хочешь ставить пакет выходов два:
1. Статик-линк (только для действительно маленьких приложений.
2. Длл-ки в папочке и хитрости с манифестами. Подробности - МСДН по поводу WinSxS.

Вообщем менять компилятор - это странное решение (я не против gcc и icc - не в том дело, в данном случае нет никаких причин).

Автор: Torsten 27.1.2009, 18:00
Проблема в динамических библиотеках.
Собирай всегда статически и проблем не будет, размер приложения сейчас не играет никакой роли, уже прошли те времени, когда каждый метр был на счету.

Автор: Любитель 27.1.2009, 18:36
И прощай поддержка плагинов в Qt? ;)

Автор: ecspertiza 28.1.2009, 09:39
Цитата(Moby @  27.1.2009,  17:32 Найти цитируемый пост)
Мне надо, что бы после компиляции релиз версии я мог смело дать кому угодно папку, ну запихнув предварительно нужные qt *.dll и модули. Как мне это сделать? 


Предлогаю сделай инсталяшку проекта, будешь всем раздовать по одному файлу Install.exe, попользуй софт Inno Setup.

Автор: ecspertiza 28.1.2009, 09:52
Цитата(Moby @  27.1.2009,  17:32 Найти цитируемый пост)
Мне надо, что бы после компиляции релиз версии я мог смело дать кому угодно папку, ну запихнув предварительно нужные qt *.dll и модули. Как мне это сделать? 

Предлогаю сделай инсталяшку проекта, будешь всем раздовать по одному файлу Install.exe, попользуй софт Inno Setup.

Автор: Elfebet 28.1.2009, 11:10
Цитата(Любитель @  27.1.2009,  18:36 Найти цитируемый пост)
И прощай поддержка плагинов в Qt? ;) 

неправда
я использую студию 2005, кьюте скомпилена статически и плагины отлично работают. Только в своих приложениях нужно подключать плагины так
Код

Q_IMPORT_PLUGIN(qjpeg)
Q_IMPORT_PLUGIN(qgif)
Q_IMPORT_PLUGIN(qsqlite)

Автор: Любитель 28.1.2009, 14:15
Ты не про то. Я про поддержку нормального плагин-фреймворка. В виде отдельных плагинов-библиотек. Можно (поиздевавшись над исходниками Qt) заставить работать плагины и так, но в каждый вкомпиливать Qt - уж избавьте меня. Статик-линк использовать следуеттогда и только тогда, когда приложение наоборот маленькое и борьба идёт за то, чтобы его ещё больше минимизировать. Чем хуже таскать длл-ки?! О том, как это делается в случае VC++ 200x (5/8) можно подробно прочитать в МСДН. Если кому интересно, могу дать конкретную ссылку.

Автор: just_geek 29.1.2009, 01:20
Цитата(Любитель @ 27.1.2009,  16:38)
Цитата(Moby @  27.1.2009,  15:38 Найти цитируемый пост)
Первое что я попробовал, это потаскать за собой все MSVCRT*.dll. На ПК(в папке windows) нашёл несколько MSVCRT*.dll. Все их впихнул в папку с релиз версией. И оказалось, что они уже там были, ну большинство из них, только не видны были. Это не помогло.

Если студия 2005 или выше, то это и не поможет. Уже ни раз писал в форуме по VC++. Если одним словом, надо таскать не длл-ки, а пакет VC++ 200x Runtime Redistributable. Он есть на диске со студией, например точно. И (при полной установке) в папочке со студией где-то тоже. Ну и, в конце концов, на сайте MS.

Не правда, главное чтоб manifest CRT'шный был вместе с дллками в папке с программой.

Автор: Любитель 29.1.2009, 01:55
Там несколько вариантов. Расположения длл-ок при юзании манифестов. Но при простом деплое - лучше всего воспользоваться готовым пакетом. А насчёт других вариантов - я писал выше smile

Автор: Moby 30.1.2009, 12:50
Цитата(ecspertiza @  28.1.2009,  09:52 Найти цитируемый пост)
Предлогаю сделай инсталяшку проекта, будешь всем раздовать по одному файлу Install.exe, попользуй софт Inno Setup.


Спасибо, это мне то же нужно. Скачал, изучаю что да как.

А вот такой вопрос. Что  же мне делать с VC++ 2008 Runtime Redistributable? Я не смог найти папку, в поиске вводил и так и сяк, но папку не нашел. Где она может лежать?

И кстати, можно ли при помощи Inno Setup селать вот что: есть моя прога, есть еще один *exe который надо поставить, к примеру тот же VC++ 2008 Runtime Redistributable, так можно ли сделать так, что бы во время инсталяции еще и этот второй *ехе начал ставиться, ну или хотя бы предложил бы?

Автор: ecspertiza 30.1.2009, 12:56
Цитата(Moby @  30.1.2009,  12:50 Найти цитируемый пост)
И кстати, можно ли при помощи Inno Setup селать вот что: есть моя прога, есть еще один *exe который надо поставить, к примеру тот же VC++ 2008 Runtime Redistributable, так можно ли сделать так, что бы во время инсталяции еще и этот второй *ехе начал ставиться, ну или хотя бы предложил бы? 


да можно, я тоже самое с Firebird делал, покури мануал по Inno setup, вообще вот как я писал.

Код

[Run]
Filename: "{app}\Firebird\firebird.exe"; Parameters: "/x"


Автор: SABROG 30.1.2009, 13:01
Чем Inno Setup лучше NSIS?

Автор: ecspertiza 30.1.2009, 13:34
SABROG, если чесно немогу сказать т.к NSIS непользовался, но про Innso Setup могу сказать, что это довольно маленькая и простая софтинка, позволяет делать всё что требуется для создаия установочного файла + у неё в комплекте шикарный мануал(на русском) и демки. 

Автор: just_geek 30.1.2009, 13:40
Визуалка полная или express ? Можно в ней же инсталляху создавать.

И еще раз повторюсь как вариант кинуть из папки Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\ (подставить нужную версию) все файлы в папку с программой (вместе с манифестом). И все будет пучком.
VC++ Runtime Redistributable - файл должен называться vcredist_x86.exe

Автор: Moby 6.2.2009, 15:28
Цитата(just_geek @  30.1.2009,  13:40 Найти цитируемый пост)
И еще раз повторюсь как вариант кинуть из папки Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\ (подставить нужную версию) все файлы в папку с программой (вместе с манифестом). И все будет пучком.


Наконец-то нашел эти файлы. Спасибо. То что надо!

Итого вся прога весит примерно10-12 метров. Что вполне нормально! А при помощи Inno Setup вообще получается шикарно, один setup файл. 

Всем ОГРОМНОЕ спасибо!

Автор: Mormishka 16.8.2011, 18:38
Цитата(Torsten @ 27.1.2009,  18:00)
Проблема в динамических библиотеках.
Собирай всегда статически и проблем не будет, размер приложения сейчас не играет никакой роли, уже прошли те времени, когда каждый метр был на счету.

Как нужно собирать статистически?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)