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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Непонятная проблема с плагином для QtDesigner  (Прочитано 10498 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #15 : Апрель 24, 2019, 19:45 »

Плагины это обычные динамические библиотеки и загружаются они системным загрузчиком ld, это его ошибка о неизвестном символе.
Не знаю как в Qt5, но в Qt4 к символам внутри библиотеки-плагина я обращался вручную, то есть явно вызывал загрузку библиотеки из своего каталога, и вызывал для их инициализации экспортированные из них методы. У меня приложение состояло из небольшого загрузчика, который больше ничего не умел, а всё остальное - плагины. При этом всё это одинаково работало в Windows и Linux.

А не может быть дублирования символов? Не может такого быть, что в плагинах загруженных ранее есть класс с таким же именем?
Вроде нет. Не должно. Тогда ошибка должна быть другой - дублирование.

ЗЫ: Проследил - нет, в других плагинах это имя не используется. Вообще - почему именно когда появляется конструктор, то всё ломается? И какое отношение конструктор может иметь к таблице виртуальных методов?
« Последнее редактирование: Апрель 24, 2019, 20:21 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #16 : Апрель 24, 2019, 20:32 »

Тогда ошибка должна быть другой - дублирование.
Нет. Будет использоваться первый известный загрузчику символ. На этом принципе работают всякие инжекторы, которые заменяют нужные функции своими, загружая свою разделяемую библиотеку первой.

ЗЫ: Проследил - нет, в других плагинах это имя не используется. Вообще - почему именно когда появляется конструктор, то всё ломается? И какое отношение конструктор может иметь к таблице виртуальных методов?
Я так понимаю, что вы загружаете сразу несколько своих плагинов. А попробуйте оставить для загрузки только один этот.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #17 : Апрель 24, 2019, 20:33 »

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

Не имеет значения. Вообще дублирование имён в плагинах никак не влияет - у меня их куча, и в них навалом дублирующихся имён. Всё прекрасно работает. Загрузчик их грузит последовательно, резолвит ссылки, и когда грузит следующий, загруженные уже не мешают. Это же плагины виджетов дизайнера, там невозможно без дублирования имён обойтись.

Оппа... Убираю макрос Q_OBJECT в начале класса - плагин грузится, со всеми конструкторами, сигналами, слотами и прочим. То есть, целиком, без каких-то других сокращений. Возвращаю - не грузится.

Сейчас собрал ещё один аналогичный плагин с другим функционалом, но он тоже инклюдит этот класс. Тоже без Q_OBJECT в этом классе. И дизайнер загрузил оба эти плагина. Но мне необходим Q_OBJECT - сигналы и слоты нужны.
« Последнее редактирование: Апрель 24, 2019, 23:10 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #18 : Апрель 24, 2019, 22:46 »


Оппа... Убираю макрос Q_OBJECT в начале класса - плагин грузится, со всеми конструкторами, сигналами, слотами и прочим. То есть, целиком, без каких-то других сокращений. Возвращаю - не грузится.


moc-то отработал? файл подцепился? что будет, если заинклюдить мок в цпп?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #19 : Апрель 24, 2019, 23:10 »

moc-то отработал? файл подцепился? что будет, если заинклюдить мок в цпп?

Что это за странные вопросы? Класс с Q_OBJECT, signals:, public slots:, emit... компилируется и создаётся объектный модуль.
Записан

2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #20 : Апрель 24, 2019, 23:15 »

но-но, мок делает отдельный цпп с отдельным .о файлом. Он есть?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #21 : Апрель 24, 2019, 23:19 »

но-но, мок делает отдельный цпп с отдельным .о файлом. Он есть?
Стоп, а как moc может не отработать? Исходник указан в проекте сразу следом за исходниками самого плагина.
И как этот класс может компилироваться, если в нём есть ключевые слова moc, не известные GCC?
Вообще-то объектника с именем, начинающемся с moc_ для исходника с этим классом нет.
« Последнее редактирование: Апрель 24, 2019, 23:25 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #22 : Апрель 24, 2019, 23:38 »

БЛИИИНННН.... Слов нет, одни буквы... В проекте в секции

HEADERS =

отсутствовал заголовочный файл в котором описан этот класс.  Злой Когда структуру на класс поменял, не добавил его. Структуре оно как бы пофик было, она не изменялась давно, без этого всё работало - файл инклюдился по маршруту в INCLUDEPATH =.

И, блин вся эта двоичная троллевская мутота, скотина МОЛЧА всё жуёт, никаких сообщений, даже варнингов, делает плагин на выходе - и .....

Тфу. Заработало.
Записан

2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #23 : Апрель 24, 2019, 23:39 »

кумейкопроблемы Подмигивающий
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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