动态库和静态库

5 篇文章 1 订阅

使用库文件的优点

  • 项目代码更加简洁,没有过多的源文件需要管理
  • 保护项目代码,以库的方式提供给使用者,使用者无法知道源代码

静态库

静态库的制作
  • 对源文件编译得到.o文件(加参数 -c)
  • ar进行打包,生成.a静态库文件
gcc  *.c(源文件) -c 
ar rcs libxxx.a *.o
	- c 创建一个库--创建
	- s 创建目标文件索引--编号索引
	- r 库中插入模块
静态库的使用
  • 需要静态库文件和对应头文件
gcc main.c -o app -L 库的路径(绝对或者相对都OK) -l库的名字(去头lib,去尾.a)

动态库

动态库的制作
  • 编译生成.o文件,必须加参数-fpic
  • gcc 生成对应库,加参数-shared
gcc 源文件(*.c) -c -fpic
gcc -shared *.o -o libxxx.so
动态库的使用和静态库保持一致
找不见库.so的问题
第一种
  • 使用环境变量 LD_LIBRARY_PATH
  • 动态库的绝对路径添加到该环境变量中
    -LD_LIBRARY_PATH= /usr/lib/xxxx
    • export LD_LIBRARY_PATH
      • 直接在shell中设置–临时当前终端生效
      • 写入配置文件
        • ~/.bashrc - 用户级别
        • /etc/prefile - 系统级别
第二种
  • 给动态库设置软连接 /usr/xxx
  • 将软连接放到 /usr/lib /usr/lib64 /lib /lib64
  • sudo ln -s /usr/xxx/xxx.so /usr/lib
第三种
  • 刷新 /etc/ld.so.cache
    • vi /etc/ld.so.conf
      • 动态库的绝对路径写入配置文件
    • sudo ldconfig -v

各自优缺点

静态库动态库
优点静态库打包到程序中,加载快;发布程序无需提供库文件,移植方便多个进程共享库文件;方便升级
缺点库文件会被加载多次,占用资源;更新库文件需要重新编译加载较慢;发布程序需要库文件的支持

静态库

动态库

参考视频

b站视频

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值