您的位置:首页 > 其它

动态链接库dll和静态连接库lib的区别

2014-04-28 00:23 246 查看
          由于专业原因,一直没有系统的学习过c++。最近在学习opencv,而opencv的配置对于编程经验不丰富的人来说理解起来还是需要一个过程的。opencv配置的设置涉及到两个很重要的概念:dll和lib。

         首先什么是dll和lib?

        lib是静态链接库,使用它的程序在链接时用库中被调用的代码替代被调用的函数和数据。

        dll(dynamic link library)的全称是动态链接库,是一个包含了可以被多个程序调用数据和代码的库。为什么叫做动态链接呢?相比静态链接,动态链接的优点是什么呢?

        静态链接库的一个很重要的特点是在链接的时候会替代调用的函数数据等,这会带来两个问题:

                  1、当静态链接内容发生改变时,需要重新链接编译,首先是费时麻烦,如果是自己编的一个小程序的话问题不是很大,但是对于一个商用软件来说,更新一个库就需要         重装整个软件,效率低下,使用麻烦。

                   2、资源和内存开支大,如果一个库同时被几个程序使用时,每个程序都需要把这个库中的代码数据加载到内存中,造成内存重复占用的问题。

        而动态链接库则很好的解决了这个问题。dll是一个已经被编译链接过的库,因此并不需要再将其包含到调用它的程序中。当程序需要使用动态链接库中的代码资源时,直接访        问动态链接库。多个程序可以访问同一个dll,这就大大减少了资源开支。当程序或软件的某些参数是经常改变的时,可以将此参数放置在动态链接库中,需要修改参数时仅仅需要替换掉该dll即可,不需要重新编译整个程序,因此程序的可维护性大大增强。当然动态链接库也不是全能的,由于dll是可以替换掉的,很多木马程序就利用这一特性,修改系统的dll,入侵损害电脑。

         想起了一个词:此消彼长。人总是在做一些折中的选择,毕竟这个世界绝对的完美是不存在的。如果喜欢一个女孩的美丽,就要接受她的傲慢,如果你喜欢一个女孩的纯洁就要接受她的幼稚,如果喜欢一个女孩的率真就要接受她的野蛮。看来编程和泡妹子还是有很大共共同性的,那为什么程序员注定要孤独终生的,郁闷。

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: