当前位置:C++技术网 > 资讯 > lib库知识全面讲解:1 静态链接lib库和lib导入库以及动态链接库dll的关系

lib库知识全面讲解:1 静态链接lib库和lib导入库以及动态链接库dll的关系

更新时间:2018-11-10 10:29:00浏览次数:1+次

    “lib静态库”和“导入lib库”这些词汇相信我们经常听说了吧。但是lib怎么来的,怎么使用的我们很多人还真不知道哦。我也是专门研究学习才发现的。所以在此详细讲述下,分享给大家。想详细了解完整的编译链接的过程,可以看看《C++零基础入门课程》的第三章,很不错的。
    先感叹一下:怎么努力还是被抛弃了:悲剧的人生莫过Lib库了!!如果你不懂,仔细看完下面的介绍你就懂了。

    怎么努力还是被抛弃了:悲剧的人生莫过Lib库了!!
    lib库实际上分为两种,一种是静态链接lib库或者叫做静态lib库,另一种叫做动态链接库dll库的lib导入库或称为lib导入库。这两个库是不一样的,很多人都分不清楚,很容易混淆。下面我给你解释清楚,你就不会再糊涂了。
    第一种是静态lib,包含了所有的代码实现的,是源代码文件.c或.cpp文件编译生成的,这个lib库就是文本形式的源代码编译后的二进制形式代码。
    第二种就是lib导入库,这个库只是dll文件中的所有函数在dll文件中的地址的说明。
    从两种库的说明可以看出,静态lib文件里是包含了所有的代码的,所以只要导入后,使用链接器链接生成exe文件后,那么exe文件就可以直接使用exe内部的代码了。这个链接lib库的过程就相当于把lib库里的所有二进制的代码复制到exe文件中。所以,链接完后,静态lib库文件就不需要了。最后,我们只要exe就行了。这个lib在链接完后,就已经失去价值了。因为exe文件中已经有了它的一份拷贝,已经不需要依靠它了。嘿嘿,exe文件似乎有点绝情哦,哈哈哈。但是,每次编译链接生成exe时都需要这个静态lib库哦。这意思是说,最后你给别人的只需要给一个exe就行了,就不必将lib也给别人。在写代码时,我们要调用lib库里的函数,我们是通过提供的头文件来知道lib静态库里都有些什么函数的。
    这个lib导入库可以说明dll的内部结构,简直就对dll内部了如指掌,我们通过lib导入库,就可以轻松调用到dll里面的函数。而我们在程序中使用dll的时候,我们导入lib导入库之后,然后将dll放入项目中,就可以直接使用,就好像dll里的代码就和我们写的cpp源代码文件一样。所以非常方便,这也是lib导入库存在的理由了。
    而dll的使用,还可以直接使用API函数来获取dll内部的函数的地址,然后将函数类型转换为正确的函数类型。而这些函数类型声明就在提供的头文件中了。头文件和我们自己写的头文件一样的。这个过程呢,就非常麻烦了,这才有上面那个lib导入库的存在的空间了。
    如果直接动态通过API函数来使用dll内部的函数,就不需要lib导入库了。也就是说,使用lib导入库库和通过API直接使用dll里的函数,是使用dll的两种方式。所以二选一即可。
    同样,lib导入库在编译链接后,那么dll里的函数地址结构等信息也都复制到exe里面了。所以,最后生成程序之后,lib导入库和静态lib一样的命运,那就是被抛弃了。哎,现实已经很残酷了,在计算机里,更是残酷。
    对于静态lib的生成和使用,以及dll和lib导入库的生成和使用,则在此系列后续文章介绍。
    如果你看完后,还有疑问,请在文章后面留言,我将仔细回答你的每一个疑问,一起学习交流。请关注C++技术网的动态,我将在网站随时更新,不能亲自通知你文章更新了,所以,请自己主动来看看哦。