一、动态库的封装
1.创建工程
首先创建一个qt工程(这里我采用的是ui工程)
这里选择Widget工程
名字取一个和动态库相关的即可,我这里取的UIDLL
这里选择CMake
这里我选择命名为Dynamic
kits采用Qt 5.14.2 GCC 64bit,之后直接下一步即可。
2.新建文件
新建global_define.h、interface.h以及interface.cpp文件(这里没有main.cpp文件是因为我在cmake中去掉了)
global_define.h文件中定义如上所示,UIDLL_SHARED_EXPORT为我们要使用的导出宏
之后在CMakeList.txt中添加add_library,其中的UIDLL表示导出的动态库名称,SHARED表示导出的是动态库,之后则是导出动态库所有的依赖文件。如果文件太多可以选择使用下述字段
FILE(GLOBAL_RECURSE CPPS RELATIVE ${CMAKE_SOURCE_DIR} *.cpp *.h *.ui)
之后在写add_library的时候就可以用下述语句了
add_library{UIDLL SHARED
${CPPS}
}
修改完CMakeList.txt后,在interface.h和interface.cpp中分别写如下代码:
之后直接构建即可。构建完成会在生成目录生成.so文件,如下所示
二、动态库的调用
1.创建调用DLL的工程
这块和上面创建CMake工程一样
2.调用dll
首先在调用dll的工程下创建下面两个文件夹
然后,将dll工程中的interface.h和global_define.h文件放进去
此外,将生成的.so文件放到lib文件夹和生成目录中
之后,在CMakeList.txt文件中加上下述代码
之后,在需要的地方引入interface.h头文件即可。