Прежде всего я использую VS 2008 и динамическую сборку Qt 4.7.0.
interface.h:
class PluginInterface
{
public:
virtual void foo() = 0;
};
Q_DECLARE_INTERFACE(PluginInterface, MY_PLUGIN_VERSION)
И у меня есть и класс, который реализует этот интерфейс:
myplugin.h
class MyPlugin: public QObject, public PluginInterface
{
public:
Q_OBJECT
Q_INTERFACES(PluginInterface)
virtual void foo(); // this functions is implemented in cpp file.
static QString goo(); // this function is also implemented in cpp file.
};
Поэтому, когда я использую этот плагин в другом проекте (MySpecialPlugin), который будет скомпилирован как библиотека динамических ссылок (фактически также реализация интерфейса плагина), я не могу вызватьMyPlugin::goo();
Заголовок «MyPlugin.h» видим для MySpecialPlugin.И госпожа VS2008 успешно скомпилировала проект.Но у меня есть ошибка на шаге ссылки LNK2001, неопределенная ссылка.Но при изменении static void goo();
на virtual void goo();
это работает.
Я использую макрос Q_EXPORT_PLUGIN2 для создания плагинов.
Что я делаю неправильно?Устанавливает ли Qt дополнительные требования по реализации интерфейсов плагинов?