冬枭

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.涉及概念,动态链接库,静态链接库

1.1动态链接库

目标程序通常都不是独立个体,生成程序时都需要链接其他的库,要用到其他库的代码。对于多个程序同时运行而言,内存中就可能有同一个库的多个副本,占用了太多内存而干的活差不多。

为了优化内存运用效率,引入了动态链接库,或叫共享库。使用动态链接库时,内存中只需要一份该库文件。其他程序要使用该库文件时,只要链接过来就行了。由于动态库文件外置,链接到动态库的目标程序相对比较小,因为剥离了大量库代码,而只需要一些链接指针。

使用动态库,也意味着程序需要链接到如*.dll或*.so文件,得提前装好动态库文件,然后目标程序才能正常运行。

1.2静态链接库

静态库就是将链接库的代码和自己编写的代码都编译链接到一块,链接到静态库的程序通常比较大,但好处是运行时依赖的库文件很少,因为目标程序自己内部集成了很多库代码。

库文件后缀

Linux/Unix系统里静态库扩展名一般是.a,动态库扩展名一般是.so。Windows系统里VC编译器用的静态库扩展名一般是.lib动态库扩展名一般是.dll

 

Lib文件到底是什么?

所以很多人认为lib为静态库,dll为动态库,这里理解并不错,但不全面。lib其实分两种的

第一种,lib是完整的静态库,里面有函数代码本身,有编译时直接将代码加入程序当中,应用程序直接使用

第二种,lib是动态库的导出声明,只含头部信息。里面只有函数所在的DLL文件和文件中函数位置的入口,代码由运行时加载在进程空间的DLL提供。

 

posted on 2022-07-08 09:46  冬枭  阅读(260)  评论(0编辑  收藏  举报