如何调用 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++ 设置相应的标志来启用。
我有一个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++ 设置相应的标志来启用。