Russian Qt Forum
Ноябрь 27, 2024, 04:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPluginLoader не может load() вне QtCreator  (Прочитано 8964 раз)
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% что я что-то где-то недописал... Но вот что и где? Все точно в релизе, файлы плагинов точно есть и не заблокированы ничем, имена передаются абсолютными путями загрузчику... Пробовал и неабсолютными - то же.

Спасибо.
« Последнее редактирование: Март 04, 2010, 18:42 от digited » Записан
Rcus
Гость
« Ответ #1 : Март 04, 2010, 18:54 »

QPluginLoader::errorString() так понимаю смотрели? И загружать через QLibrary (для выявления проблем связанных с разрешением символов из зависимостей) пробовали? хм...
Записан
digited
Гость
« Ответ #2 : Март 04, 2010, 19:05 »

errorString: "Cannot load library C:/somepath/logond.dll: The specified module could not be found."
Но дллька там точно лежит. Настораживают никсовые слэши в пути, хотя пробовал скармливать путь, обработанный .toNativeSeparators - результат тот же Грустный
Опять же, запускаю сие из-под QtCreator, полный путь к плагину так же (проверил точно) передается QPluginLoader'у, но тот спокойно все "находит" и грузит.

QLibrary не пробовал, стоит ли?
« Последнее редактирование: Март 04, 2010, 19:06 от digited » Записан
digited
Гость
« Ответ #3 : Март 04, 2010, 19:13 »

Мде, смотрю qpluginloader.cpp:337

QString fn = QFileInfo(fileName).canonicalFilePath();

Видимо, с никсовыми слэшами - это так задумано.
Записан
digited
Гость
« Ответ #4 : Март 04, 2010, 19:18 »

Ошибка, которая у меня вылазит, видимо, пишется в qt\src\plugin\qlibrary_win.cpp:87

ps если положить плагин в windows/system, без полного пути никак не видится, с полным путем то же - нормально грузится из-под креатора и "не находится" при запуске приложения руками. Админский аккаунт, никаких особых прав на файле вроде нет. Пробовали на другой виндовой машине без установленного кьюта - то же, плагин "не находится".
« Последнее редактирование: Март 04, 2010, 19:30 от digited » Записан
crackedmind
Гость
« Ответ #5 : Март 04, 2010, 19:32 »

Винда, если не ошибаюсь еще со времен 2000 винды, поддерживает "никсовые" слэши в именах файлов.

1. скомпилить приложение с CONFIG+=console
2. выставить set QT_DEBUG_PLUGINS=1
3. запустить
4. почитать что вывелось.

« Последнее редактирование: Март 04, 2010, 19:34 от crackedmind » Записан
digited
Гость
« Ответ #6 : Март 04, 2010, 20:02 »

Выводится что-то постороннее, нужного не видно: http://pastebin.com/k0ejXqY8

(я правильно понял насчет set?)
Записан
ритт
Гость
« Ответ #7 : Март 06, 2010, 02:11 »

т.е. собираем одной версией, а грузим из другой, да?
Записан
digited
Гость
« Ответ #8 : Март 09, 2010, 17:32 »

Нет, один и тот же релизный билд приложения и плагинов, дллки кьюта для отдельного запуска взяты из qt/bin
Записан
кып
Гость
« Ответ #9 : Март 10, 2010, 12:51 »

У меня вот тут 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.)"
как бы говорит о о том что версии приложения и плагинов разные, одна release, другая debug.
Записан
digited
Гость
« Ответ #10 : Март 11, 2010, 13:37 »

Это кьют грузит свои плагины, они там, видимо, собраны под разные конфиги - что-то грузится, что-то - нет. Лично мои плагины таких сообщений не вызывают, все точно собрано под один конфиг и запускается одно и то же приложение - сначала из-под креатора, где все плагины находятся (я вывожу пути к файлам в логи), затем - мышекликом (запуском руками), опять же пути к файлам плагинов, передаваемые QPluginLoader'у, те же (вывожу messagebox'ом), но он их не грузит с вышеописанной ошибкой.
Записан
кып
Гость
« Ответ #11 : Март 12, 2010, 12:54 »

И все таки
Цитировать
В реестре в plugin cache.false никакой разницы c успешными загрузками не пишется (кроме 0 в одном месте), все собираю в релизе.

А ошибки о невозможности смешивать разные версии идут при попытке загрузить куте-шные плагины именно релиз версии (см выделенное жирным), а дебаг грузятся нормально. Т.е. приложение собрано в дебаг версии.

Хотя это может и не имеет отношения к проблеме.
Покажи строку загрузки своего плагина.


Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 20.