【手把手教学】VS2013 C++建立QT动态链接库
本文仅梳理总结自己在学习过程中的一些理解和思路,水平有限,理解粗鄙浅薄且不一定正确。文章所有观点均不保证绝对正确,请酌情参考。如果各位朋友发现任何错误请及时告诉我,大家一起讨论共同提高。
动态链接库
写在前面(可以跳过)
本文其实本质上是写给自己的备忘录,如果我不尽可能详尽地记录下操作流程和细节步骤,我不到俩星期就会忘得干干净净。
链接
C代码编译生成可执行程序的过程如下图所示:

(图片来自知乎专栏)
链接就是把目标文件与一些库文件生成可执行文件的一个过程,它所解决的问题即是将我们自己写的代码和别人写的库集成在一起。
链接,动态链接库和静态链接库
库
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(Windows下以.lib为后缀,Linux下以.a为后缀)和动态库(Windows下以.dll为后缀,Linux下以.so为后缀,特别的,在Windows下的动态链接也可以用到.lib为后缀的文件,但这里的.lib文件叫做导入库,是由.dll文件生成的)。

(图片来自博客)
静态链接库
在生成可执行文件的时候(链接阶段),把所有需要的函数的二进制代码(静态库)都(通过拷贝的方式)包含到可执行文件中去,这样,在程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行。
动态链接库
在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。使用动态链接的多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝。不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数。DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件或更改其内容不会对EXE文件造成任何影响。
- 静态链接发生在编译过程中,形成可执行程序前,而动态链接把链接这个过程推迟到了运行时再进行
- 静态链接相当于拷贝库文件到工程中,执行速度快

最低0.47元/天 解锁文章
1993





