应某项目要求,将前期开发的部分QT工程类打包成DLL库供其他项目使用。在项目移植的过程中遇到下列问题,解决的过程如下:
1.创建dll项目
此处选择共享库,要用到的QT模块暂时不选,后续直接在pro文件中添加
2.在pro文件中加入该动态库需要用到的QT模块,本例中要用到网络通信,所以加入network模块
3.编译后在debug或release下找到dll文件和lib文件,此时由于工程类继承自QOBJECT类,所以目录下还生成了moc文件。
4.将lib库和头文件放入测试项目目录下,将dll文件放入测试项目的debug或release目录下
5.编写测试程序,我的测试程序就是使用dll中类初始化对象,然后连接一个定时器超时信号,槽函数为打印一串数据。
6.将dll库加入到测试程序中去
6.1 添加为外部库
6.2 选择lib,动态链接,并选择合适的系统
7.编译测试程序,发现如下报错,不允许dllimport导出
参考这篇博文
“不允许dllimport静态数据成员的定义”解决方法
将头文件中的QOBJECTDLL_EXPORT宏屏蔽后解决
8.重新编译后发现再次报错,无法打开dll库
检查pro文件,发现win32还有dllD文件的选项,将该选项屏蔽,直接使用LIBS+=-L$$PWD/./ -lqobjectDll
作出以上修改后,可正常运行测试程序
以上是移植dll遇到的问题,供参考