Russian Qt Forum

Qt => Вопросы новичков => Тема начата: stanukih от Декабрь 16, 2014, 18:16



Название: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 18:16
Сильно не ругайте только начал изучать qt. Через среду программа запускается работает как надо, но проблема - как получить .exe. Точнее сам exe получил но при его запуске выходит сообщение:
Точка входа в процедуру
_Z8qWinMainP11HINSTANCE_S0_PciRiR7QVectorIs1_E не найдена в библиотеке DLL Qt5Core.dll - это в релизе

Запуск программы невозможен, так как на компьютере отсутствует Qt5Cored.dll. Попробуйте переустановить программу. - это дебаг.

Использую qt creator 3.2.1 библиотеки версии 5.3. Как получить нормальный exe? Заранее спасибо.


Название: Re: Компилирование
Отправлено: Bepec от Декабрь 16, 2014, 18:41
Добавить в папку с программой все нужные dll - он их явно просит :D
Ну или скопировать файл в */Qt/5.3/bin


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 18:50
То что длл кинуть надо эт я понял. Вопрос в том какие и откуда их брать (с:\Qt\xxxxx). И почему на дебаг и релиз разные вопросы?


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 18:57
Да если это важно то приложение с гуем.


Название: Re: Компилирование
Отправлено: __Heaven__ от Декабрь 16, 2014, 19:07
У вас с в папке Qt/5.3/bin есть все необходимые библиотеки.
1) можно создать ярлык на свой exe, а в качестве рабочей папки указать вашу Qt/5.3/bin
2) из Qt/5.3/bin таскайте в папку с exe необходимые dll. На которые ругается ваш exe, те и таскайте, пока ругань не пропадет

P.S.: у вас exe собран в дебаге, можно пересобрать в релизе


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 19:12
Так я же написал что скомпилировал и в дебаг и в релизе. Кстати интересная вещь консольные программы в дебаге и релизе выдает разные результаты. С гуй программой такого пока не замечал.


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 19:13
в qt\5.3 папки bin нет


Название: Re: Компилирование
Отправлено: kambala от Декабрь 16, 2014, 19:17
что-то типа такого: Qt\5.3\msvc2012_opengl\bin\


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 19:20
Понял  ;D . Программа запустилась. Теперь вопрос нужно все эти dll с собой тоскать или есть возможность их как-то объединить или все в exe засунуть? Да и как-то вес за  300 мб приложения с 1 формой как-то странно после делфи 7. Можно ли как-то сжать?


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 19:22
Кстати запустилась версия с дебаг. Все те же dll кинул в папку с релизом и снова ошибка таже что и в 1 сообщении только кракозябры появились. Че там не так?


Название: Re: Компилирование
Отправлено: kambala от Декабрь 16, 2014, 19:31
релиз версия требует длл без суффикса d.

таскать придется, да. но под виндой есть UPX.


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 19:36
Чем отличаются версии для дебага и релиза? Кроме отличия по весу в несколько раз.


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 19:39
И тогда пользуясь случаем еще вопрос есть ли смысл прикрутить компилятор vs? Будет ли плюс в компиляции? Какие будут минусы? Да и, конечно большое спасибо.


Название: Re: Компилирование
Отправлено: kuzulis от Декабрь 16, 2014, 20:09
Ох уж эти студенты школьники.. Столько вопросов сразу.. :)
А погуглить не судьба?


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 16, 2014, 20:11
Гуглить я буду о том как прикрутить другой компилятор в случае если скажут что польза есть.


Название: Re: Компилирование
Отправлено: kambala от Декабрь 16, 2014, 20:21
для начинающих разницы в компиляторе нет


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 18, 2014, 19:08
Закинул все dll все работает. Перенес папку с программой со всеми dll и вываливается ошибка что-то вроде что qt платформа не установлена. Создал папку platforms с qwindows.dll. Разницы никакой. Закинул эту библиотеку в c:\windows и в c:\windows\system32 заработало. Как собрать статический ехе чтоб он нормально запускался на других пк? Гуглом пользоваться умею весь день пробовал то что пишут на форумах пользы 0. Какой Рабочий способ получить работающий ехе?


Название: Re: Компилирование
Отправлено: gil9red от Декабрь 18, 2014, 19:35
Какой Рабочий способ получить работающий ехе?

Положить в папке с ехе все нужные ему dll.

Для qt5 нужно в папке с ехе создать папку platforms и положить в нее qwindows.dll
Остальные по нужде:
1. запускаете ехе
2. появляется ошибка
3. смотрите какой dll не хватает ехе
4. копируете нужную dll в папку с ехе
5. goto 1.


Название: Re: Компилирование
Отправлено: Igors от Декабрь 18, 2014, 19:45
весь день пробовал то что пишут на форумах пользы 0. Какой Рабочий способ получить работающий ехе?
Если упорствуете (типа 1 - и только 1! exe) - продолжайте читать/пробовать (вероятно с той же пользой). Там пишут много, в том числе и на этом форуме.

А если скромнее, "папка с файлами" (но без соплей в system32 и.т.п) - то platforms в текущий (там где exe) плюс в main (до создания QApplication) сделать setLibraryPath


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 18, 2014, 19:54
Вариант с папкой очень даже устраивает. Папку platforms создал. А что надо в main прописать и куда?


Название: Re: Компилирование
Отправлено: Igors от Декабрь 19, 2014, 08:38
Папку platforms создал. А что надо в main прописать и куда?
Напр так
Код
C++ (Qt)
#if Q_OS_WIN
void SetAppPluginPath( void )
{
QStringList lst;
TCHAR name[1024];
GetModuleFileName(0, name, sizeof(name) - 1);
QFileInfo fi(name);
lst.push_back(fi.absolutePath());
QApplication::setLibraryPaths(lst);
}
#endif
 
Вызвать до создания QApplication


Название: Re: Компилирование
Отправлено: Old от Декабрь 19, 2014, 08:44
Напр так
Вызвать до создания QApplication
А зачем это все?
Qt без лишних телодвижений находит свои плагины и библиотеки из platforms.


Название: Re: Компилирование
Отправлено: Igors от Декабрь 19, 2014, 08:51
А зачем это все?
Qt без лишних телодвижений находит свои плагины и библиотеки из platforms.
У меня не находило пока не сделал так


Название: Re: Компилирование
Отправлено: Пантер от Декабрь 19, 2014, 08:55
А зачем это все?
Qt без лишних телодвижений находит свои плагины и библиотеки из platforms.
У меня не находило пока не сделал так
У них бывает косяк, ищет или в ./platforms или в ./plugins/platforms. по крайней мере, так с другими плугинами было. Тоже в main'е всегда выставлял QApplication::setLibraryPaths на всякий.


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 19, 2014, 14:28
Тогда еще вопрос зависит ли где программа будет искать библиотеки от среды выполнения. Ну например у меня система с win7 на которой все и так работает и проект на работоспособность я проверяю в linux под wine. Могут ли появиться какие-то проблемы на win xp?


Название: Re: Компилирование
Отправлено: kambala от Декабрь 19, 2014, 15:09
длл компилятора могут отсутствовать (VS runtime / mingw), лучше тоже с собой их таскать.

зависимости смотреть через тотал коммандер или dependency walker.


Название: Re: Компилирование
Отправлено: Пантер от Декабрь 19, 2014, 15:17
длл компилятора могут отсутствовать (VS runtime / mingw), лучше тоже с собой их таскать.

зависимости смотреть через тотал коммандер или dependency walker.
Не просто TotalCommander, а плагин к нему FileInfo.


Название: Re: Компилирование
Отправлено: stanukih от Декабрь 19, 2014, 15:31
Вот тут отдельное спасибо. Вроде пока вопросов нет.