动态链接库和静态链接库的区别

来源:互联网 发布:mac hot tahiti试色 编辑:程序博客网 时间:2024/05/24 03:02

平时总听人讲动态链接库、静态链接库、lib、dll、so等名词,一直搞不清楚这几者之间的区别以及各自的应用场合。后来上网仔细查了一下资料,终于搞清楚了,在这里整理一下先。

动态链接库:动态链接库中包含了多个已经被编译、链接好的函数和数据资源,但并不包含函数的源码。动态链接库在windows下是.dll 文件,英文为Dynamic Link Library,在Linux下是.so文件。如果在你的程序中使用了动态链接库,那么在程序运行时,会动态地将该库加载,然后调用库中的函数。动态库的优点是便于维护和更新各个程序模块,比如在一个大型程序中,会有数十个甚至更多的模块。使用动态库封装每个模块后,在需要更新某模块时,只需替换该模块对应的.dll或者.so文件即可,而不需要更新整个程序,这一点是下文要讲到的静态链接库无法实现的。

静态链接库:静态链接库在windows下是.lib文件,在Linux下是.a文件。和动态链接库不同,它包含了函数的源代码,因此文件大小通常比动态库大很多。如果你的程序中依赖了某个静态库,那么在你的程序编译链接过程中,会自动从静态库中取出需要用到的函数代码,然后和当前程序进行链接,生成可执行文件。由此可见,最终的可执行文件在运行时不再需要依赖静态库,可直接运行,这一点明显区别于动态库(在动态库的情况中,程序在运行时必须能够找到相应的动态库文件)。另外和动态库不同的是,静态库中某函数更新后,整个程序需要重新编译链接。

动态库和静态库各有利弊,可根据应用要求选择合适的使用方法。

PS:这里还有一个很重要的概念需要强调。在使用编程工具(如VS)编译生成dll时,同时会生成.lib文件,注意,这里的.lib文件并不是静态链接库,而是.dll的导入库,是为了方便程序在dll中寻找相应函数的,所以千万不能搞混了!

0 0
原创粉丝点击