windows下lib文件文件解析 dll.lib windows下动态库dll也要有个 lib

静态lib文件

静态lib文件实际上就是任意个obj文件的集合,而obj文件就是cpp文件编译之后产生的一种文件,一个cpp文件编译之后只会产生一个obj文件,而多个obj文件就可以连接生成lib文件。
静态lib文件实际上是包含了所有的导出声明和实现。你如果把这个lib文件链接到自己的程序之后,这个lib文件中的所有代码都会嵌入进来,哪怕你只用到了其中一部分,剩下没用到的也进了你的代码。自然会导致你的库体积没有意义地变大,失去了使用动态库的灵活性,而且发布新的版本时必须要发布新的应用程序才行,而不是简单打个补丁就好。就是因为这种缺点,才会出现动态dll调用这种方式。

动态lib文件和dll文件

一个dll工程生成一个dll文件的时候,总是伴随着生成一个lib文件,这个lib文件其实是一个动态的lib,它的大小比静态lib要小很多,因为这个lib文件其实只是包含了一些函数索引信息,记录了dll中那些函数的入口和位置,dll中才是具体的函数实现。那么为什么有了dll,还要有一个lib呢?
这就是动态库链接的过程了,首先配置好动态lib库目录和动态dll目录,以及头文件的目录。然后在你的代码中include用到的头文件,代码完成之后有两个过程:(1)编译:这个过程只需要用到这里的动态lib文件【注:在静态lib的情况下,仍然只是在编译阶段用到lib文件,只不过静态lib文件包含了完整的实现,所以编译生成exe之后就可以直接用了而已】,然后和你的代码打包到一起。(2)运行:这个过程就需要用到dll文件了,上面打包好的东西里面,只是记录下了那些用到的函数的入口和具体位置,并没有真正的实现代码,所以在运行期间,就由那些入口找到正确的位于dll中的位置,然后直接执行那些函数就行了。
dll其实就是exe,只不过它没有main函数,所以不能单独执行而已。事实上, 在实际的使用过程中我们也发现,很多应用程序都并不是一个完整的单独可执行文件,它们被分割成一些单独的相对对立的动态链接库,只有在执行应用程序的时候,用到的dll才会被调用。

原文地址:https://www.cnblogs.com/bigben0123/p/13038189.html