旧理解(当初理解较浅,今再看到有新发现)
链接:
静态链接库和动态链接库区别_动态链接库和静态链接库的区别-CSDN博客
由于本人不是做架构方面,给大佬打螺丝。长时间的惯性思维就是要使用其他项目的类或者函数,先导出成dll。然后那个项目附加依赖项添加lib。
重点:
1.lib后缀不单是叫静态库,还有另一个叫导入库。静态库和导入库是两个概念,一个是传统意义上的静态库,另一个是配合dll使用的导入库。(这个非常重要)
2.一个项目要引用另一个项目可以直接使用lib库,并不需要导出,但需要类的头文件。然后在附加依赖项添加lib。或者在使用的文件添加如下方法。
3.而使用动态库有两种方法:隐式链接调用和显示链接调用
隐式链接调用:就是平常打螺丝惯用的方法。导出要调用的类和函数,然后在要使用的项目附加依赖性,再附加上那些类和函数的头文件位置。
显示链接调用:平常非常少使用的方法。一般调用非C++语言编写生成的dll。要使用的话,需要在程序声明函数原型,解析dll里面的函数。
4.为什么要调用dll,不直接使用lib。(更新dll容易,这是很多软件惯用手法,这个老生常谈)
先看看下面的说法:
总结就是:
1.静态库中包含的是全部的源码信息,而动态库dll里面包含的是所需要的部分源码信息。而它提供的导入库lib只是做索引的符号信息(所占大小远小于静态库)。两种lib包含的信息不一样。
2.静态库是将被调用的函数和数据复制一份到所使用的模块,而动态库只需要实现一次就行。比如两个模块使用了静态库里面的函数,这两个模块都需要复制两份内容到使用的模块内。