近期,在学完 Qt 编程的一些基础知识后,我逐渐往更深层次进发。今天,要记录的是,Qt 框架中动态链接库相关的知识。
有动态链接库是就会有静态链接库,来都来了,肯定是要一次性都解决的。先来看看这两类链接库的区别。
静态链接库(Static-link library)就是把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分的库。换言之,函数和过程的代码就在主程序的 .exe
文件中,该文件包含了运行时所需的全部代码。当多个程序调用相同的函数是,内存中会存在这个函数的多个拷贝。在 Windows 操作系统中,静态链接库对应的后缀名为 .lib
, 在 Linux 操作系统中,静态链接库对应的后缀名为 .a
。
动态链接库(Dynamic-link library)是微软公司在 Windows 操作系统中实现共享库概念的一种实现方式,后被很多操作系统作为参考,从而使其有了更大的发展。在 Windows 操作系统中,静态链接库对应的后缀名为 .dll
, 在 Linux 操作系统中,动态链接库对应的后缀名为 .so
。
在 Windows 操作戏台中,所谓动态链接,就是把一些经常会共享的代码(静态链接的 OBJ 程序库)制作成 DLL 档,当可执行文件调用到 DLL 档内的函数时, Windows 操作系统才会把 DLL 档加载到内存中, DLL 档本身的结构就是可执行档,当程序有需求时函数才进行链接。一般情况下,如果一个应用使用了动态链接库, Win32 系统保证内存中只有DLL的一份复制品。
说完动态链接库与静态链接库的区别,不能光纸上谈兵,应该动手来个实例。不如就动手实现一个简易计算的动态库吧。
编写动态库
1.建立库文件
首先打开 Qt Creator 的新建对话窗口,找到 Library
,点击创建 C++ Library
。
给定一个名字,然后点击下一步 ,在选择 Qt module 时,选择 Core
模块。
接着,勾选一个编译环境。
2. 编写库函数代码
compute.pro
1 | QT -= gui |
compute.h
1 | /*************************************************** |
compute_global.h
1 |
compute.cpp
1 | /*************************************************** |
在编写完上述代码后,我们调试一下,或者构建不运行,就会在对应文件夹看到已经生成 .lib
和 .dll
等库文件了。
调用动态库
1.创建项目
这里就不再赘述了了了了了了了了了了
2.拷贝头文件
将头文件拷贝到应用工程的目录下,对于大型项目要单独建立文件夹,这里是一个小 Demo ,我就直接放到根目录下了。
3. 引入dll
.pro
1 | LIBS += -LE:/Qt_code/build-compute-Desktop_Qt_5_14_0_MinGW_64_bit-Debug/compute.dll |
main.cpp
1 |
|
4.拷贝 .dll 到编译好的程序 .exe 同级目录下
5. 调试运行
此篇仅做动态链接库知识基础,还有更多高级应用,请移步搜索引擎~