qt创建共享动态库

minGW编译器生成的后缀是.a 和 .dll  

msvc编译器生成的后缀是 .lib 和 .dll

linux下生成的后缀是.so


我使用的是qt-msvc-5.7.0 版本

首先创建动态库,new project -> Library -> c++库

qt创建共享动态库

然后选择创建的库的类型 有共享库和静态库和qt插件三种,选择共享库

qt创建共享动态库



按需求选择 ,如果用到界面则加上QtGui QtWidgets ,一般的用QtCore

qt创建共享动态库


创建完成,包含以下4个文件

qt创建共享动态库

其中修改.pro文件,添加下面部分

qt创建共享动态库

增加的部分 config :用来进行编译控制,区分Debug版本和Release版本的库的名称(Debug版本库名字后面带d,Release版本不带)

其中关于sharelib_global.h 文件

在编译共享库时,必须将其标记为导出。为了在客户端使用共享库,一些平台可能需要一个特殊的导入声明。

为此,Qt 提供了两个特殊的宏:

Q_DECL_EXPORT:当编译共享库时,必须将其添加到使用的符号声明。

Q_DECL_IMPORT:当编译一个(使用了该共享库)客户端时,必须将其添加到使用的符号声明。

所以,要确保正确的宏能够被调用(无论是编译共享库本身,还是在客户端使用共享库),通常通过添加一个特殊的头文件来解决,这就是sharelib_global.h 存在的原因。

sharelib.h添加一个简单的函数接口

qt创建共享动态库

sharelib.cpp

qt创建共享动态库


创建成功后 ,将库里面的文件整理成以下结构

include文件夹

qt创建共享动态库

lib文件夹

qt创建共享动态库


接下来我们使用刚刚生成的库

项目右键 添加库->外部库

qt创建共享动态库

分别选择windows系统,动态,为debug版本加d,然后选择生成的sharelib的路径

qt创建共享动态库

将在.pro文件中增加以下代码

qt创建共享动态库


在程序中使用,还要把生成的dll文件放置在和执行文件同一目录,不然会出错

qt创建共享动态库

qt创建共享动态库


参考原文地址:http://blog.csdn.net/liang19890820/article/details/77337088