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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Многоуровневая система плагинов  (Прочитано 5063 раз)
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« : Декабрь 21, 2012, 12:01 »

Ситуация такая - основная программа загружает плагины стандартными кутешными средствами, а плагины, в свою очередь, грузят свои (под)плагины.
Проблема в том, что такая связка вполне себе работает под Windows, а в Linux плагины плагинов не загружаются.
Догадываюсь, что связано это с системными особенностями загрузки библиотек...

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

решено: добавлением в LDPATH папки в которой лежат плагины (в моем случае <app_dir>/plugins)
« Последнее редактирование: Декабрь 21, 2012, 16:05 от kai666_73 » Записан
Dancing_on_water
Гость
« Ответ #1 : Декабрь 21, 2012, 12:20 »

Как грузятся плагины в плагинах? через QPluginLoader? Если да, то проверьте а существует ли подгружаемые вами файлы по тому пути, что вы указали.
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #2 : Декабрь 21, 2012, 14:10 »

Как грузятся плагины в плагинах? через QPluginLoader? Если да, то проверьте а существует ли подгружаемые вами файлы по тому пути, что вы указали.

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

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

Почему так происходит, догадываюсь/уверен процентов на 95.
Либа плагина загружается приложением два раза, первый раз при загрузке самого плагина, второй раз при загрузке подплагина по зависимостям.
Винь такое безобразие спокойно разруливает, а Линь отказывается загружать подплагин.
Собственно вопрос не почему происходит такое безобразие,..
а есть ли у кого какие-нибудь идеологические соображения как реализовать многоуровневую систему плагинов, которая будет работать и под Linux
« Последнее редактирование: Декабрь 21, 2012, 14:23 от kai666_73 » Записан
Dancing_on_water
Гость
« Ответ #3 : Декабрь 21, 2012, 14:27 »

Цитировать
и повторюсь - в Windows все работает, в Linux
По опыту: это значит где-то в голове что-то с чем-то неправильно сложилось. Улыбающийся
Давайте не будем спешить и напишем
Код:
loader.load()
if( loader.isLoad() )
{
 plugin = loader.instance();
}
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #4 : Декабрь 21, 2012, 14:31 »

А отладчиком внутрь loader.instance() ходил? В каком именно месте с return 0 вылетает?
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #5 : Декабрь 21, 2012, 14:40 »

А отладчиком внутрь loader.instance() ходил? В каком именно месте с return 0 вылетает?

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

Сообщений: 319


Просмотр профиля
« Ответ #6 : Декабрь 21, 2012, 14:43 »

Dancing_on_water
А разве
Код:
loader.insatance()
не выполняет load по необходимости?
Записан
Dancing_on_water
Гость
« Ответ #7 : Декабрь 21, 2012, 14:46 »

Выполняет, но уж если столкнулись с проблемой, то лучше делать все по шагам.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #8 : Декабрь 22, 2012, 21:57 »

На Linux (Calculate) нет дебажной сборки Qt ((
Собрать самому?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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