Russian Qt Forum

Qt => Вопросы новичков => Тема начата: eXeLe от Март 11, 2013, 15:16



Название: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: eXeLe от Март 11, 2013, 15:16
Qt5 с mingw4.7, QtCreator 2.6
Написал программку Qt Gui, через крейтер запускается отлично, переключаюсь на "Release", компилирую.
Пробую запускать из папки с программой - хочет dll-ок.
Кидаю ей:
D3DCompiler_43.dll
icudt49.dll
icuin49.dll
icuuc49.dll
libgcc_s_sjlj-1.dll
libGLESv2.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Sql.dll
Qt5Widgets.dll

Дллки брал тут: %путь_к_Qt%\Qt5.0.1\5.0.1\mingw47_32\bin
Так же в корне каталога со своей прогой создал папку sqldrivers и скинул туда все содержимое: %путь_к_Qt%\Qt5.0.1\5.0.1\mingw47_32\plugins\sqldrivers (дрова odbc)

Но вместо запуска, прога начинает ругаться на:

Цитировать
Microsoft Visual C++ Runtime Library

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
К сожалению, это дает мало понимания того, в чем же осталась проблема?
Были мысли, что дллки беру не оттуда, но только в %путь_к_Qt%\Qt5.0.1\5.0.1\mingw47_32\bin есть все, что нужно проге.


Название: Re: Требуемые файлы для запуска программы
Отправлено: alex312 от Март 11, 2013, 15:26
http://www.prog.org.ru/topic_24263_0.html


Название: Re: Требуемые файлы для запуска программы
Отправлено: eXeLe от Март 11, 2013, 15:28
там о 10-й студии речь.
я сразу указал, что mingw у меня.
на всякий случай попробовал скопировать platforms - реакции ноль


Название: Re: Требуемые файлы для запуска программы
Отправлено: alexis031182 от Март 11, 2013, 15:31
В списке не хватает "platforms/qwindows.dll". Для mingw оно тоже нужно.


Название: Re: Требуемые файлы для запуска программы
Отправлено: eXeLe от Март 11, 2013, 15:32
да, по совету выше все же скопировал каталог platforms к себе.
лучше не стало, но раз нужно - пусть будет =)


Название: Re: Требуемые файлы для запуска программы
Отправлено: eXeLe от Март 11, 2013, 15:59
погуглил еще усерднее на тему "qt5 mingw dependencies"
среди перекрестных ссылок между темами различных форумов набрел на требование libEGL.dll, которое никак не указывается программой, как нехватающая ДЛЛка.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: alexis031182 от Март 11, 2013, 17:39
Да, egl тоже обязательно.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 11, 2013, 19:30
Qt5 вообще построена на противоречиях :D Я  целых 20 минут искал и думал, почему ж прога не запускается ) А там всего то была дллка, цепляющаяся динамически (тот самый platforms). Почему сделано так - непонятно. Вероятно от великого желания соблюсти стандарт плагинов :D


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: kambala от Март 11, 2013, 20:07
зачем сидеть думать, если есть тотал коммандер и dependency walker?


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 11, 2013, 21:14
Как вы, милостивый государь, отследите динамически подключающуюся дллку? :)

Да, depends её не видит. Да, её нет в зависимостях exe. Да, программа не падает, просто не запускается.

PS так же можно попытаться отследить зависимость от openssl. Та же фигня с плагинами имейджев и драйверов sql :D


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: kambala от Март 11, 2013, 21:36
QtCore, QtGui и т.п. тоже ведь динамически цепляются, так что ты какую-то неверную терминологию используешь


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 11, 2013, 21:38
лол, как это не видит? Может имеется ввиду плагин? Тогда нужно смотреть вывод приложения в консоль - наверняка приложение ругнется что не загружен плагин.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 11, 2013, 21:53
Увы, нет, не видит. Он видит слинкованные библиотеки и зависимости. А плагины Qt подгружаются динамически. Используется Qt-шная система плагинов. Т.е. там прямо в коде динамически вытаскиваются функции и объекты. Можно посмотреть на примере других любых плагинов.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 11, 2013, 22:50
плагин конечно не видит, на то он и плагин, но ты ведь указал, что не видит зависимости от dll, таких как QtCore или QtGui.
Вот что выдает для дизайнера в убунте:
Цитата: Terminal
sergiy@vmware:~$ ldd /usr/local/Qt-5.0.1/bin/designer
   linux-gate.so.1 =>  (0xb76e7000)
   libQt5DesignerComponents.so.5 => /usr/local/Qt-5.0.1/lib/libQt5DesignerComponents.so.5 (0xb73d8000)
   libQt5PrintSupport.so.5 => /usr/local/Qt-5.0.1/lib/libQt5PrintSupport.so.5 (0xb737e000)
   libQt5Designer.so.5 => /usr/local/Qt-5.0.1/lib/libQt5Designer.so.5 (0xb6e0e000)
   libQt5Widgets.so.5 => /usr/local/Qt-5.0.1/lib/libQt5Widgets.so.5 (0xb6761000)
   libQt5Network.so.5 => /usr/local/Qt-5.0.1/lib/libQt5Network.so.5 (0xb6632000)
   libQt5Xml.so.5 => /usr/local/Qt-5.0.1/lib/libQt5Xml.so.5 (0xb65ea000)
   libQt5Gui.so.5 => /usr/local/Qt-5.0.1/lib/libQt5Gui.so.5 (0xb614d000)
   libQt5Core.so.5 => /usr/local/Qt-5.0.1/lib/libQt5Core.so.5 (0xb5c56000)
   ...
Что-то подобное должно быть и на винде.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 12, 2013, 06:58
Кхм. Нигде я не писал, что он не видит QtCore с которым он слинкован :)

Я и писал про плагины, которые являются файлами, надо же, динамических библиотек аля qgif4.dll и прочая :D Зависимости можно отследить только те, что слинкованы с проектом.

Для плагинов же используется обычное дёрганье по имени, вытаскивание объекта или функций. Это отследить невозможно сразу, т.е. зависимости эти можно увидеть только отслеживая обращения к диску :D

Собственно именно на это ушли мои 20 минут. :D

PS в принципе плагины хорошо, но такие как из каталога platforms - это бред. Нигде про них особо не упомянуто, в проекте их увидеть нереально. (ну или я не обращал внимания) Т.е. ты не узнаешь об этой зависимости и будешь много думать, запустив прогу на виртуалке и недоумевая, почему ничего не работает :D


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 12, 2013, 14:12
Как вы, милостивый государь, отследите динамически подключающуюся дллку? :)

Да, depends её не видит. Да, её нет в зависимостях exe. Да, программа не падает, просто не запускается.

Кхм. Нигде я не писал, что он не видит QtCore с которым он слинкован :)

Я и писал про плагины, которые являются файлами, надо же, динамических библиотек аля qgif4.dll и прочая :D Зависимости можно отследить только те, что слинкованы с проектом.

ИМХО тут противоречие самому себе. А на счет ошибки загрузки плагина. Я же выше написал - при ошибке загрузки плагина приложение выдает ворнинг наподобие этого

Цитировать
~/work/qt5/qtbase/examples/widgets/widgets/analogclock$ ./analogclock -platform windows
Failed to load platform plugin "windows". Available platforms are:
eglfs (from /usr/local/Qt-5.0.1/plugins/platforms)
kms (from /usr/local/Qt-5.0.1/plugins/platforms)
linuxfb (from /usr/local/Qt-5.0.1/plugins/platforms)
minimal (from /usr/local/Qt-5.0.1/plugins/platforms)
minimalegl (from /usr/local/Qt-5.0.1/plugins/platforms)
wayland-egl (from /usr/local/Qt-5.0.1/plugins/platforms)
wayland (from /usr/local/Qt-5.0.1/plugins/platforms)
wayland-xcomposite (from /usr/local/Qt-5.0.1/plugins/platforms)
xcb (from /usr/local/Qt-5.0.1/plugins/platforms)
eglfs
kms
linuxfb
minimal
minimalegl
wayland-egl
wayland
wayland-xcomposite
xcb


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 12, 2013, 14:33
Ох tpw. динамическая динамически подключаемая библиотека и динамическая слинкованная библиотека - это БОЛЬШАЯ разница :) Читать надо чужие цитаты :)

Потому что первая независима. А вторая намертво забита в зависимостях екзешника.

Список слинкованных легким касанием клавиатуры получается из файла. Динамическую определить нельзя, если нет оповещения.

Я не знаю как и под чем вы запускали своё неизвестно что :) И где у вас выдаёт варнинг :)

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

PS судя по выводу и флагам запуска, вы запускаете пример в линуксе с параметром командной строки с явным указанием платформы. Просто интересно, если запустить просто - он выдаст такой же вывод?


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 12, 2013, 14:58
Ох tpw. динамическая динамически подключаемая библиотека и динамическая слинкованная библиотека - это БОЛЬШАЯ разница :) Читать надо чужие цитаты :)

Ну как бы DLL (англ. dynamic-link library — «библиотека динамической компоновки», «динамически подключаемая библиотека») (http://ru.wikipedia.org/wiki/Динамически_подключаемая_библиотека)

PS судя по выводу и флагам запуска, вы запускаете пример в линуксе с параметром командной строки с явным указанием платформы. Просто интересно, если запустить просто - он выдаст такой же вывод?
Нет, если не указывать имя платформы, то по умолчанию загрузится плагин xcb. А разве на винде не выдает ворнинг?


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 12, 2013, 15:51
Увы, консоль в винде не настолько хороша :)

И чтобы её подключить необходимо написать небольшую простыню кода в программе :D

ну я ж выделил слова, блин...
Цитировать
динамическая динамически подключаемая библиотека и динамическая слинкованная библиотека

Динамически подключаемая = подключается непосредственно в коде, руками программиста. И упоминание о ней не найдёшь в файле.

Слинкованная = в файле exe прописаны библиотеки, необходимые для запуска программы. Их список спокойно считывается из файла тем же депендеци валкером.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 12, 2013, 16:34
Увы, консоль в винде не настолько хороша :)

И чтобы её подключить необходимо написать небольшую простыню кода в программе :D

Лол, што? Т.е. с консоли приложение запустить нельзя?  ???
И если надо подключить консоль просто достаточно добавить
CONFIG += console
в pro-файл, это тоже большая проблема, ага  ;D

ну я ж выделил слова, блин...
Цитировать
динамическая динамически подключаемая библиотека и динамическая слинкованная библиотека

Динамически подключаемая = подключается непосредственно в коде, руками программиста. И упоминание о ней не найдёшь в файле.

По ходу ты путаешься в понятиях.
Есть всего два вида библиотек - динамические и статические. Со статическими все понятно. А вот динамическая библиотека может быть загружена в адресное пространство приложения двумя способами:
1. Самой ОС в процессе старта приложения
2. В течения выполнения приложения посредством QLibrary, либо через QPluginLoader, если для dll определен соответсвующий интерфейс. В этом случае нельзя определить зависимость приложения от dll



Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Igors от Март 12, 2013, 17:10
Лол, што? Т.е. с консоли приложение запустить нельзя?  ???
И если надо подключить консоль просто достаточно добавить
CONFIG += console
в pro-файл, это тоже большая проблема, ага  ;D
А без креатора на Вындоуз, напр в MSVC? А то пишешь printf - а он нигде не печатает

По ходу ты путаешься в понятиях.
...
2. В течения выполнения приложения посредством QLibrary, либо через QPluginLoader, если для dll определен соответсвующий интерфейс. В этом случае нельзя определить зависимость приложения от dll
А без QLibrary или QPluginLoader никак нельзя?


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 12, 2013, 17:25
Кхм. twp.

Да, не выводит :D Бедные мы виндузятники.

Сама ОС ничего не подгружает :D Подгружает именно экзешник твой ) По таблице импорта функций вроде, если не ошибаюсь :D И именно из таблицы зависимости видны :D Это слинкованная библиотека :D

Заметь, я тебе специально цитату привожу в третий раз. Прочитай её пожалуйста :D

Цитировать
динамическая динамически подключаемая библиотека и динамическая слинкованная библиотека

Разберём цитату.

Встречается понятие динамическая библиотека. А давай его в конец поместим. Получится 2 типа:
1) динамически подключаемая;
2) слинкованная.

И это тип подключения :D При этом понятие одно и то же - динамическая библиотека :)

PS если и этот разбор цитаты ты не осилишь, я не буду с тобой спорить :D Итак уже развели демагогию :D



Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Igors от Март 12, 2013, 17:42
А помнится был и третий вариант, опция называлась типа "Weak Import". Нашли либу - хорошо, грузим. Нет - все равно запускаемся. Конечно надо было провериться на наличие, но в принципе было довольно удобно (без кучи оберток)


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: kambala от Март 12, 2013, 17:49
А без креатора на Вындоуз, напр в MSVC? А то пишешь printf - а он нигде не печатает
запускать в дебаг режиме, я других способов не знаю


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Hellraiser от Март 12, 2013, 18:48
А без креатора на Вындоуз, напр в MSVC? А то пишешь printf - а он нигде не печатает
А окно "Вывод" (для русской версии) в MSVS уже поломалось? Вообще-то, когда Qt-программа сыпет сообщения, к примеру, о невозможности коннекта, то все попадает именно туда.
P.S. Запускать надо в режиме отладки, даже для релизной версии.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 12, 2013, 18:58
А без креатора на Вындоуз, напр в MSVC? А то пишешь printf - а он нигде не печатает
Это работает и в студии если сгенерировать VS проект из pro-файла.
Можно и самому это сделать, нужно только указать теже параметры проекта, что генерит qmake для vcproj.

А без QLibrary или QPluginLoader никак нельзя?
можно конечно. на винапи это LoadLibraryEx.


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 12, 2013, 19:03
Кхм. twp.

Да, не выводит :D Бедные мы виндузятники.

Походу бедный только ты тут один ;D

И да, найди ка мне описание динамическая слинкованная библиотека, джедай ты наш  ;D


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Igors от Март 12, 2013, 19:15
можно конечно. на винапи это LoadLibraryEx.
С последующим GetProcAddress. Так что это не заслуга QLibrary/QPluginLoader  :)

А окно "Вывод" (для русской версии) в MSVS уже поломалось? Вообще-то, когда Qt-программа сыпет сообщения, к примеру, о невозможности коннекта, то все попадает именно туда.
P.S. Запускать надо в режиме отладки, даже для релизной версии.
Вопрос был без креатора. Сообщения-то там (в IDE) есть, но назначить туда стандартный вывод просто так не удается, потому что приложение "не консольное". Можно печатать в IDE какой-то дебажной ф-цией, но это страшно неудобно. Приходится передирать примерчик (довольно мутный), тогда на запуске появляется еще одно (черное) окно приложения и в него идет print. Ну правда и в релизе работает, но все равно невдобняк.

В общем, насчет вындозной консоли Верес прав, тут его затюкали незаслуженно  :)


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: Bepec от Март 12, 2013, 19:30
Да twp тролль :D

Он не может прочитать полностью двух предложений, к сожалению :D Не буду его больше кормить :D

Но всё же странно они сделали, Qt-тролли. Хоть бы предупреждение выдавали ;)


Название: Re: [РЕШЕНО]Требуемые файлы для запуска программы
Отправлено: twp от Март 12, 2013, 21:22
С последующим GetProcAddress. Так что это не заслуга QLibrary/QPluginLoader  :)
Понятное дело, но тут тред по Qt, а не по винапи, и тем более не о тонкостях загрузки dll в виндоуз.

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

Верес, ты ж меня тыкал носом в
Цитировать
динамически подключаемая библиотека и динамическая слинкованная библиотека
ну вот я хотел узнать у великого джедая, что есть "динамическая слинкованная библиотека". А ты съехал и обвинил меня в троллинге. Ну да, ты ж великий джедай, можно и не отвечать, хуле