Уважаемые форумчане не могу разобраться вот с такой проблемой, подскажите что не так...
Набросал тестовое приложение следующей архитектуры
1) базовый бинарник просто загружает в память все плагины из указанной директории и запускает функцию init у обоих плагинов
2) 2 плагина (cначала грузится core потом plugin1)
при попытке вызвать в функции init второго плагина функцию класса первого плагина получаю ошибку
libplugin1.so: undefined symbol: _ZN5ICore10mainWindowEv
вот пример обоих плагинов
TEMPLATE = lib
CONFIG += plugin
QT += widgets
HEADERS += core.h \
icore.h
SOURCES += core.cpp \
icore.cpp
OTHER_FILES += core.json
#ifndef CORE_H
#define CORE_H
#include <QObject>
#include "../plugin.h"
class Core : public QObject, Plugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID Plugin_iid FILE "core.json")
Q_INTERFACES(Plugin)
void init();
};
#endif // CORE_H
#ifndef ICORE_H
#define ICORE_H
#include <QMainWindow>
class Q_DECL_EXPORT ICore :public QObject {
Q_OBJECT
public:
explicit ICore(QMainWindow *mw);
static QMainWindow *mainWindow();
};
#endif // ICORE_H
#include "QMainWindow"
#include "icore.h"
#include "core.h"
void Core::init() {
QMainWindow *mainwindow = new QMainWindow;
new ICore(mainwindow);
mainwindow->show();
}
#include "icore.h"
static QMainWindow *mainwindow;
ICore::ICore(QMainWindow *mw) {
mainwindow = mw;
}
QMainWindow* ICore::mainWindow() {
return mainwindow;
}
TEMPLATE = lib
CONFIG += plugin
QT += widgets
HEADERS += plugin.h
SOURCES += plugin.cpp
OTHER_FILES += plugin.json
#ifndef PLUGIN1_H
#define PLUGIN1_H
#include <QObject>
#include "../plugin.h"
class Plugin1 : public QObject, Plugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID Plugin_iid FILE "plugin1.json")
Q_INTERFACES(Plugin)
void init();
};
#endif // PLUGIN1_H
#include <QDebug>
#include "../core/icore.h"
#include "plugin1.h"
void Plugin1::init() {
qDebug() << "init Plugin1";
qDebug() << ICore::mainWindow();
}