Linux下静态库与动态库使用总结

区别

  1. 使用静态库占用的磁盘空间相对比动态库要大。
    如果多个可执行程序使用库中同一个函数,那么链接静态库时同一个函数的代码会被复制多份,而链接动态库只复制一份。
  2. 动态库可共享且版本更新方便
    静态链接库在程序编译的时候就被加载进来,不能共享 ;动态链接库是在程序执行的时候加载,可共享。库函数版本升级时,直接替换动态库文件即可,不需要重新编译源程序;而如果更新了静态库,则可执行程序需要重新编译。
  3. 加载速度不一样
    静态库在链接时就和可执行文件在一起了,而动态库在加载或运行时才链接,所以使用静态库时加载相对更快。
  4. 程序运行时依赖动态库的存在。
    静态链接的可执行文件不需要依赖其他的内容即可运行,而动态链接的可执行文件必须依赖动态库的存在。在部署运行环境时,必需拷贝动态库到指定路径下,否则运行会报错。

注意事项

链接库的放置顺序

如下设置,可编译成功

$ gcc -c main.c
$ gcc -static -o main main.o -lm

但是,如下设置,编译报错:

$ gcc -c main.c
$ gcc -static -lm -o main main.o
main.o: In function 'main':
main.c:(.text+0x2f): undefined reference to 'exp'
collect2: error: ld returned 1 exit status

所以,需要把具有引用关系的库放置在后面。

参考:

https://zhuanlan.zhihu.com/p/71372182

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值