我正在尝试构建一个插件应用程序,一个加载一些插件的应用程序。。。我玩了一些动态加载,一切都很好。现在我在玩静态加载。。。我陷入了以下情况:
我有两个插件,应用程序可以同时使用,但不能同时使用。在main.cpp
中,我有:
Q_IMPORT_PLUGIN(RawPlugin)
Q_IMPORT_PLUGIN(BPlugin)
和在.pro:中
LIBS = -L../../plugins-static -lraw
LIBS = -L../../plugins-static -lb
通过以上配置,我得到:
In function `ZN29StaticRawPluginPluginInstanceC1Ev':
C:UsersUserDownloadsthethingsourceappbuild-static/../main.cpp:7: undefined reference to `qt_static_plugin_RawPlugin()'
collect2.exe: error: ld returned 1 exit status
Makefile.Debug:78: recipe for target 'debugapp.exe' failed
mingw32-make[1]: *** [debugapp.exe] Error 1
注释任何一个Q_IMPORT_PLUGIN
和相应的LIBS
行使其工作。
我做错了什么?
两个插件实现相同的接口,有关系吗?
class RawPlugin : public QObject,
public PluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.PluginInterface")
Q_INTERFACES(PluginInterface)
class BPlugin : public QObject,
public PluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.PluginInterface")
Q_INTERFACES(PluginInterface)
您的问题确实与.pro文件有关。你已经写了
LIBS = -L../../plugins-static -lraw
LIBS = -L../../plugins-static -lb
它的作用是第一行将LIBS
设置为-L../../plugins-static -lraw
。第二行只是将其更改为-L../../plugins-static -lb
。所以你最终只得到了两个libs中的一个。您应该在=
:前面添加一个+
LIBS += -L../../plugins-static -lraw
LIBS += -L../../plugins-static -lb