很久没有写一些关于Qt的东西,今天介绍一个小方法将Qt Application Project 改成Qt Library Project。
换句话来说,如果原来使用的是Qt项目,生成exe,后来想要将这个项目生成DLL,那么简单的改变方法如下(在VS2008中):
在project的设置里(没有什么特别的步骤,唯一请注意第三部):
1) 定义一个macro 对于Qt,DLL export,写一个头文件(但是也是可以直接使用Q_DECL_EXPORT),类似和Qt的DLL project自动生成头文件一样。
2 #define MYGLOBAL_H
3
4 #include <QtCore/qglobal.h>
5
6 #ifdef MYLIB_LIB
7 # define MY_EXPORT Q_DECL_EXPORT
8 #else
9 # define MY_EXPORT Q_DECL_IMPORT
10 #endif
11
12 #endif // MYGLOBAL_H
2) 将Project的Configuration Tpye改成Dynamic Library (.dll)
3) 修改Prprocessor Definitions设定:
MYLIB_LIB
QT_DLL
4) linker-->Ouput File 改成生成.dll
5) 在我们想要export的class加入上面写的头文件
和一般dll export类似,只是我们这里使用的是我们定义的export的macro
附注:
如果只是简单的使用__declspec(dllexport) ,而不是使用Qt的export DLL的macro,如果使用生成的DLL会出现类似这样的错误。
error LNK2001: unresolved external symbol "public: static struct QMetaObject const XXX::staticMetaObject"
非常简单来说,Qt的object比较特殊,不能直接通过常用的__declspec(dllexport)进行export。
没有评论:
发表评论