关于静态库和动态库

写在前面的话:

  1. 版权声明:本文为博主原创文章,转载请注明出处!
  2. 博主是一个小菜鸟,并且非常玻璃心!如果文中有什么问题,请友好地指出来,博主查证后会进行更正,啾咪~~
  3. 每篇文章都是博主现阶段的理解,如果理解的更深入的话,博主会不定时更新文章。
  4. 本文最后更新时间:2020.7.27

正文开始

概念解释

库函数:库函数(Library function)是把函数放到库里,供别人使用。
库文件:看不到库文件里定义的函数和变量,但是可以使用。

库文件分为两种:

  1. 静态库(.a):在编译时将库文件里的代码搬迁到可执行文件里
  2. 动态库(.so):在执行时将需要的库文件里的代码搬迁到可执行文件里

静态库

静态库的创建

gcc -c 源文件.c
ar -rcs 静态库名 目标文件1 目标文件2

c:create,如果库文件不存在,则创建该库文件
r:replace,如果库文件存在,则替换原文件
s:更新库文件

例如,将add.c做成库文件:

  1. 将 add.c 编译为 add.o 文件:gcc -c add.c
  2. ar -rcs libadd.a add.o

提醒:add是名字,一定要加前缀、后缀

静态库的使用

静态库创建成功之后,对全局变量和函数进行声明,在编译的时候加上库文件就行了

gcc -o file file.c -L -lname

如 add 的例子:

gcc -o main main.c -L. -ladd

-L:指定库的路径
-L.:当前目录

动态库

gcc -shared -fPIC add.c -o libadd.so

依赖于动态库编译的文件和依赖于静态库编译的文件的优缺点

  1. 使用静态库代码体积大,动态库代码体积小
  2. 使用静态库执行效率高,动态库执行效率低
  3. 使用静态库不利于升级(升级麻烦,需要重新编译),使用动态库易于升级
  4. 使用静态库编译速度慢,使用动态库不需要加载,编译速度快
  5. 使用静态库代码布局更方便

什么时候使用动态库或静态库?

要求升级,动态库
对执行效率有要求,静态库
对编译速度有要求,动态库

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值