🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309762

C++, Qt, Pluginy

#309762
From: szykcech
Date: Sat, 29 Dec 2018 12:02
26 lines
4089 bytes
Witam
Piszę edytor tekstu (Textprofan 4) w oparciu o bibliotekę Qt. Program jest modułowy składa się z małego exe, kilku bibliotek i 2 pluginów (na początek). Pluginy są ładowane dynamicznie (jednak na starcie programu) przewidywane jest ich włączanie i wyłączanie wg uznania (ze zwalnianiem pamięci a nie jedynie ukrywanie).

W pluginie libTextEditorPluginD.so mam funkcjonalność pojedynczego edytora (zawiera on fabrykę obiektów edytora z których każdy składa się z kontrolki (ang. widget) zawierającego właściwy edytor (dziedziczący po QPlainTextEdit) - jest to wygodne i rozwijalne gdyby np. komuś zamarzyło się kiedyś dodawanie nowych elementów takich jak pasek przycisków funkcyjnych czy panel wyszukiwania i zamiany.

W pluginie libSyntaxHighlighterPluginD.so mam funkcjonalność kolorowania składni oraz korekty pisowni (wynika to z tego, że nie może być 2 obiektów kolorujących podłączonych do jednego edytora QPlainTextEdit). 

Problem mam taki:
W pluginie libSyntaxHighlighterPluginD.so mam wywołanie zwrotne (ang. callback) który wywołuje libTextEditorPluginD.so za pośrednictwem fabryki obiektów Pluigns (w bibliotece z programem głównym). Problem w tym, że używam w libSyntaxHighlighterPluginD.so rzutowania z pomocą qobject_cast (co jest chyba zalecaną metodą). Do działania tego rzutowania potrzebne są meta dane z klasy na którą rzutuję, czyli TextEditorPlugin::TextEditor z pluginu libTextEditorPluginD.so. I okazuje się, że plugin libSyntaxHighlighterPluginD.so nie może być załadowany, bo nie widzi funkcji implementowanej przez makro Q_OBJECT klasy TextEditorPlugin::TextEditor z libTextEditorPluginD.so. Faktycznie początkowo jego brakowało, ale je dodałem wyczyściłem projekt i usunąłem pluginy z dysku i skompilowałem to wszystko od zera i nadal zgłasza taki błąd:

Exception occurs! Sender: Textprofan.so, Error code: 3
Message:
File: ../../../../Textprofan4/Src/Libs/TextprofanLib/Src/Factories/Plugins.cpp, in line: 140, in function: loadPlugin
Error code: 3, Error message: SyntaxHighlighterPlugin plugin load failed! Path: /home/szyk/!-pro/Textprofan4-work/Plugins/libSyntaxHighlighterPluginD.so
Error message: Cannot load library /home/szyk/!-pro/Textprofan4-work/Plugins/libSyntaxHighlighterPluginD.so.1.0.0: (/home/szyk/!-pro/Textprofan4-work/Plugins/libSyntaxHighlighterPluginD.so.1.0.0: undefined symbol: _ZN16TextEditorPlugin10TextEditor16staticMetaObjectE)

Sprawdzałem Midnight Commander-em i ta funkcja jest w tym pliku libTextEditorPluginD.so
który jest ładowany prawidłowo:

"TextEditorPlugin plugin dependency checked. Path: /home/szyk/!-pro/Textprofan4-work/Plugins/libTextEditorPluginD.so"
"TextEditorPlugin plugin sucessfuly loaded. Path: /home/szyk/!-pro/Textprofan4-work/Plugins/libTextEditorPluginD.so"

Ma ktoś doświadczenie z programami z pluginami i mógłby pomóc?

dzięki za cierpliwość i za dobre chęci i szczęśliwego Nowego Roku!
Szyk Cech
Technical Details
Message-ID: <38ca6860-de3a-49ff-8fb1-88b49056dd25@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin1!goblin.stu.neva.ru!v55no3271415qtk.0!news-out.google.com!h3ni7637qtk.1!nntp.google.com!v55no3271404qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:8084:: with SMTP id b126mr22908011qkd.9.1546084960045;        Sat, 29 Dec 2018 04:02:40 -0800 (PST)
X-Received: by 2002:a81:27cd:: with SMTP id n196mr344356ywn.2.1546084959886; Sat, 29 Dec 2018 04:02:39 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin1!goblin.stu.neva.ru!v55no3271415qtk.0!news-out.google.com!h3ni7637qtk.1!nntp.google.com!v55no3271404qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Sat, 29 Dec 2018 04:02:39 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=188.146.112.172; posting-account=pyti1AoAAAAf66c003TUy10QAAnMWaKw
NNTP-Posting-Host: 188.146.112.172
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <38ca6860-de3a-49ff-8fb1-88b49056dd25@googlegroups.com>
Subject: C++, Qt, Pluginy
From: szykcech@gmail.com
Injection-Date: Sat, 29 Dec 2018 12:02:40 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit