Russian Qt Forum

Qt => Общие вопросы => Тема начата: kai666_73 от Декабрь 21, 2012, 12:01



Название: [РЕШЕНО] Многоуровневая система плагинов
Отправлено: kai666_73 от Декабрь 21, 2012, 12:01
Ситуация такая - основная программа загружает плагины стандартными кутешными средствами, а плагины, в свою очередь, грузят свои (под)плагины.
Проблема в том, что такая связка вполне себе работает под Windows, а в Linux плагины плагинов не загружаются.
Догадываюсь, что связано это с системными особенностями загрузки библиотек...

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

решено: добавлением в LDPATH папки в которой лежат плагины (в моем случае <app_dir>/plugins)


Название: Re: Многоуровневая система плагинов
Отправлено: Dancing_on_water от Декабрь 21, 2012, 12:20
Как грузятся плагины в плагинах? через QPluginLoader? Если да, то проверьте а существует ли подгружаемые вами файлы по тому пути, что вы указали.


Название: Re: Многоуровневая система плагинов
Отправлено: kai666_73 от Декабрь 21, 2012, 14:10
Как грузятся плагины в плагинах? через QPluginLoader? Если да, то проверьте а существует ли подгружаемые вами файлы по тому пути, что вы указали.

- да через QPluginLoader
- все подгружаемые файлы на месте, проверил qDebug-м, что передается лоадеру и наличие соотв. файла

и повторюсь - в Windows все работает, в Linux
Код:
        QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
        QObject *plugin = loader.instance();
plugin = 0

Почему так происходит, догадываюсь/уверен процентов на 95.
Либа плагина загружается приложением два раза, первый раз при загрузке самого плагина, второй раз при загрузке подплагина по зависимостям.
Винь такое безобразие спокойно разруливает, а Линь отказывается загружать подплагин.
Собственно вопрос не почему происходит такое безобразие,..
а есть ли у кого какие-нибудь идеологические соображения как реализовать многоуровневую систему плагинов, которая будет работать и под Linux


Название: Re: Многоуровневая система плагинов
Отправлено: Dancing_on_water от Декабрь 21, 2012, 14:27
Цитировать
и повторюсь - в Windows все работает, в Linux
По опыту: это значит где-то в голове что-то с чем-то неправильно сложилось. :)
Давайте не будем спешить и напишем
Код:
loader.load()
if( loader.isLoad() )
{
 plugin = loader.instance();
}


Название: Re: Многоуровневая система плагинов
Отправлено: xokc от Декабрь 21, 2012, 14:31
А отладчиком внутрь loader.instance() ходил? В каком именно месте с return 0 вылетает?


Название: Re: Многоуровневая система плагинов
Отправлено: kai666_73 от Декабрь 21, 2012, 14:40
А отладчиком внутрь loader.instance() ходил? В каком именно месте с return 0 вылетает?

На Linux (Calculate) нет дебажной сборки Qt ((
Пока попробую c LoadHint поиграться и посмотрю сообщение об ошибке лоадера (errorString () )


Название: Re: Многоуровневая система плагинов
Отправлено: kai666_73 от Декабрь 21, 2012, 14:43
Dancing_on_water
А разве
Код:
loader.insatance()
не выполняет load по необходимости?


Название: Re: Многоуровневая система плагинов
Отправлено: Dancing_on_water от Декабрь 21, 2012, 14:46
Выполняет, но уж если столкнулись с проблемой, то лучше делать все по шагам.


Название: Re: Многоуровневая система плагинов
Отправлено: xokc от Декабрь 22, 2012, 21:57
На Linux (Calculate) нет дебажной сборки Qt ((
Собрать самому?