Название: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 04, 2010, 18:39 Привет, прошу помощи:
под winxp/Qt 4.6/mingw свое приложение нормально грузит самописные плагины (динамически), пока запускается из-под QtCreator. Как только пытаюсь вынуть и собрать автономную версию (с .dll-ками мингв, гцц и кьюта), приложение не может загрузить плагины (хотя видит их), QtPluginLoader.instance и .load возвращают нули, имя плагина передается абсолютным, пробовал с обоими слэшами - грузит из-под креатора, автономно - не грузит ни в какую :( В реестре в plugin cache.false никакой разницы c успешными загрузками не пишется (кроме 0 в одном месте), все собираю в релизе. Собственно, вопрос: что такого мистического может выставлять QtCreator запускаемому приложению, что QPluginLoader нормально грузит .dll с моими плагинами, но не может вне QtCreator'а? p.s. echoplugin вот работает отдельно, то есть 95% что я что-то где-то недописал... Но вот что и где? Все точно в релизе, файлы плагинов точно есть и не заблокированы ничем, имена передаются абсолютными путями загрузчику... Пробовал и неабсолютными - то же. Спасибо. Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: Rcus от Март 04, 2010, 18:54 QPluginLoader::errorString() так понимаю смотрели? И загружать через QLibrary (для выявления проблем связанных с разрешением символов из зависимостей) пробовали? хм...
Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 04, 2010, 19:05 errorString: "Cannot load library C:/somepath/logond.dll: The specified module could not be found."
Но дллька там точно лежит. Настораживают никсовые слэши в пути, хотя пробовал скармливать путь, обработанный .toNativeSeparators - результат тот же :( Опять же, запускаю сие из-под QtCreator, полный путь к плагину так же (проверил точно) передается QPluginLoader'у, но тот спокойно все "находит" и грузит. QLibrary не пробовал, стоит ли? Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 04, 2010, 19:13 Мде, смотрю qpluginloader.cpp:337
QString fn = QFileInfo(fileName).canonicalFilePath(); Видимо, с никсовыми слэшами - это так задумано. Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 04, 2010, 19:18 Ошибка, которая у меня вылазит, видимо, пишется в qt\src\plugin\qlibrary_win.cpp:87
ps если положить плагин в windows/system, без полного пути никак не видится, с полным путем то же - нормально грузится из-под креатора и "не находится" при запуске приложения руками. Админский аккаунт, никаких особых прав на файле вроде нет. Пробовали на другой виндовой машине без установленного кьюта - то же, плагин "не находится". Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: crackedmind от Март 04, 2010, 19:32 Винда, если не ошибаюсь еще со времен 2000 винды, поддерживает "никсовые" слэши в именах файлов.
1. скомпилить приложение с CONFIG+=console 2. выставить set QT_DEBUG_PLUGINS=1 3. запустить 4. почитать что вывелось. Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 04, 2010, 20:02 Выводится что-то постороннее, нужного не видно: http://pastebin.com/k0ejXqY8
(я правильно понял насчет set?) Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: ритт от Март 06, 2010, 02:11 т.е. собираем одной версией, а грузим из другой, да?
Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 09, 2010, 17:32 Нет, один и тот же релизный билд приложения и плагинов, дллки кьюта для отдельного запуска взяты из qt/bin
Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: кып от Март 10, 2010, 12:51 У меня вот тут http://www.prog.org.ru/topic_12645_0.html (http://www.prog.org.ru/topic_12645_0.html) была похожая проблема, правда без креатора.
И сообщение Код: "The plugin 'C:/Qt/2009.05/qt/plugins/iconengines/qsvgicon4.dll' uses incompatible Qt library. (Cannot mix debug and release libraries.)" Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: digited от Март 11, 2010, 13:37 Это кьют грузит свои плагины, они там, видимо, собраны под разные конфиги - что-то грузится, что-то - нет. Лично мои плагины таких сообщений не вызывают, все точно собрано под один конфиг и запускается одно и то же приложение - сначала из-под креатора, где все плагины находятся (я вывожу пути к файлам в логи), затем - мышекликом (запуском руками), опять же пути к файлам плагинов, передаваемые QPluginLoader'у, те же (вывожу messagebox'ом), но он их не грузит с вышеописанной ошибкой.
Название: Re: QPluginLoader не может load() вне QtCreator Отправлено: кып от Март 12, 2010, 12:54 И все таки
Цитировать В реестре в plugin cache.false никакой разницы c успешными загрузками не пишется (кроме 0 в одном месте), все собираю в релизе. А ошибки о невозможности смешивать разные версии идут при попытке загрузить куте-шные плагины именно релиз версии (см выделенное жирным), а дебаг грузятся нормально. Т.е. приложение собрано в дебаг версии. Хотя это может и не имеет отношения к проблеме. Покажи строку загрузки своего плагина. |