动态库 and 静态库 总结版

一、库的类型 (库即为源代码的二进制文件)
(一) 在windows中 ( .lib 静态库    .dll 动态库)
(二) 在linux中 (.a   静态库    .so 动态库)
(三) 静态库和动态库的优缺点
***静态库,程序build时用    VS    动态库,程序run时用

静态库,占内存,程序运行快
动态库,省内存,程序启动运行相对慢一点
当前开发环境用的是动态库  .so  (主要是要修改库文件代码方便一些)

当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被copy到最终的可执行文件中。
这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,这样运行起来相对就快些。
不过会有个缺点: 占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中, 而且这些程序运行时, 
都会被加载到内存中. 无形中又多消耗了更多的内存空间.

 与共享库连接的可执行文件只包含它需要的函数的引用表,而不是所有的函数代码,只有在程序执行时,
 那些需要的函数代码才被拷贝到内存中。这样就使可执行文件比较小, 节省磁盘空间,更进一步,
操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用,也同时节约了内存。
不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些,总的来说静态库是牺牲了空间效率,
换取了时间效率,共享库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。

 另外,一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,
在接口不变的前提下,使用共享库的程序只需要将共享库重新编译就可以了,
而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一便。

(四)如何知道一个可执行程序依赖哪些库
ldd命令可以查看一个可执行程序依赖的共享库,

(五).在新安装一个库之后如何让系统能够找到他
如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。
如果安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下

1.编辑/etc/ld.so.conf文件,加入库文件所在目录的路径

2.运行ldconfig,该命令会重建/etc/ld.so.cache文件
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值