如何调用 Qt Quick 2 Extension Plugin 的方法?

How can I invoke a method of Qt Quick 2 Extension Plugin?

我有一个Subdirs项目,有两个子项目。一个是 Qt Quick Controls 2 应用程序,另一个是 Qt Quick 2 扩展插件。

TestQtQuickPlugin    ( Subdirs project )
    |----app         ( Qt Quick Controls 2 Application )
    |     |------main.cpp
    |    ...
    |----plugin      ( Qt Quick 2 Extension Plugin )
    |       |----MyItem.h
    |       |----MyItem.cpp
    |      ...

MyItem class继承自QQuickItem,它有一个方法int getNum()。在主要方法中,我将通过 MyItem().getNum().

调用此方法

在Ubuntu中编译运行成功。但是在Windows中出现错误:

main.obj : error LNK2019: unresolved external symbol "public: __cdecl MyItem::MyItem(class QQuickItem *)" (??0MyItem@@QEAA@PEAVQQuickItem@@@Z) referenced in function main

main.obj : error LNK2019: unresolved external symbol "public: virtual __cdecl MyItem::~MyItem(void)" (??1MyItem@@UEAA@XZ) referenced in function main

main.obj : error LNK2019: unresolved external symbol "public: int __cdecl MyItem::getNum(void)" (?getNum@MyItem@@QEAAHXZ) referenced in function main

我的项目有什么问题?

Windows 在创建动态链接库时使用 "symbol hiding"。

为了使符号 "visible" 在这样的库之外,它们需要 "exported"。

请参阅此处 documentation

这实际上也可以在 Linux 上通过为 g++ 设置相应的标志来启用。