我正在尝试构建一个插件应用,一个加载一些插件的应用...我已经玩了一点动态加载,一切都很好。现在我正在玩静态加载......我遇到了以下情况:
我有两个插件,应用程序适用于两者,但不能同时使用这两个插件。在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:\Users\User\Downloads\thething\source\app\build-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 'debug\app.exe' failed
mingw32-make[1]: *** [debug\app.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)
答案 0 :(得分:1)
您的问题确实存在于.pro文件中。你写过
LIBS = -L../../plugins-static -lraw
LIBS = -L../../plugins-static -lb
这样做的第一行是将LIBS
设置为-L../../plugins-static -lraw
第二行只是将其更改为-L../../plugins-static -lb
。所以你最终只有两个库中的一个。您应该在+
前面添加 =
:
LIBS += -L../../plugins-static -lraw
LIBS += -L../../plugins-static -lb