qt创建共享动态库
minGW编译器生成的后缀是.a 和 .dll
msvc编译器生成的后缀是 .lib 和 .dll
linux下生成的后缀是.so
我使用的是qt-msvc-5.7.0 版本
首先创建动态库,new project -> Library -> c++库
然后选择创建的库的类型 有共享库和静态库和qt插件三种,选择共享库
按需求选择 ,如果用到界面则加上QtGui QtWidgets ,一般的用QtCore
创建完成,包含以下4个文件
其中修改.pro文件,添加下面部分
增加的部分 config :用来进行编译控制,区分Debug版本和Release版本的库的名称(Debug版本库名字后面带d,Release版本不带)
其中关于sharelib_global.h 文件
在编译共享库时,必须将其标记为导出。为了在客户端使用共享库,一些平台可能需要一个特殊的导入声明。
为此,Qt 提供了两个特殊的宏:
Q_DECL_EXPORT:当编译共享库时,必须将其添加到使用的符号声明。
Q_DECL_IMPORT:当编译一个(使用了该共享库)客户端时,必须将其添加到使用的符号声明。
所以,要确保正确的宏能够被调用(无论是编译共享库本身,还是在客户端使用共享库),通常通过添加一个特殊的头文件来解决,这就是sharelib_global.h 存在的原因。
sharelib.h添加一个简单的函数接口
sharelib.cpp
创建成功后 ,将库里面的文件整理成以下结构
include文件夹
lib文件夹
接下来我们使用刚刚生成的库
项目右键 添加库->外部库
分别选择windows系统,动态,为debug版本加d,然后选择生成的sharelib的路径
将在.pro文件中增加以下代码
在程序中使用,还要把生成的dll文件放置在和执行文件同一目录,不然会出错
参考原文地址:http://blog.csdn.net/liang19890820/article/details/77337088