Q_IMPORT_PLUGIN,我可以使用多少次?

时间:2016-03-27 21:12:43

标签: c++ qt c++11 qt5

我正在尝试构建一个插件应用,一个加载一些插件的应用...我已经玩了一点动态加载,一切都很好。现在我正在玩静态加载......我遇到了以下情况:

我有两个插件,应用程序适用于两者,但不能同时使用这两个插件。在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)

1 个答案:

答案 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