动\静态库

原理:
将源码文件编译成自己的目标文件(即:从.c 文件编译成 .o文件)
然后通过不一样的链接方式,生成动态库(.so)、静态库(.a)或可执行文件(.exe)
动态库可以直接通过源码编译生成

静态库
程序在运行之前将静态库链接到可执行文件中,程序运行时不再需要静态库
生成方法:
1.xxx.c --> xxx.o
2.通过 ar -rc libxxx.a xxx.o 将xxx.o --> libxxx.a
3.在编译main.c时,通过 -L. -libxxx.a 链接至可执行文件
gcc main.c -L. -libxxx.a
显示:
在这里插入图片描述
查看静态库内容:
objdump -S libxxx.a
动态库:
程序在运行的时候,才链接动态库至可执行文件 (可多个程序同时使用动态库)
优点:节约内存和磁盘空间(动态库共享)

生成方法:
1.生成位置无关码:gcc -fPIC -c xxx.c
(xxx.c —> xxx.o)
2.产生共享库格式:gcc -shared -o libxxx.so xxx.o
(xxx.o —> libxxx.so)
3.在编译main.c时,通过 -L. -libxxx.so 链接至可执行文件
gcc main.c -L. -libxxx.so
显示:
在这里插入图片描述
注意:
静态库在生成可执行文件之后可以删除,不影响文件的正常执行
在这里插入图片描述
动态库在生成可执行文件之后不能删除,否则文件会运行失败
失败原因是:error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory(即:找不到动态库)
在这里插入图片描述

注:关于-fPIC 生成位置无关码,实现真正意义上的多个进程共享so文件,这一个库在不同进程中的虚拟地址不同,但操作系统会把它们映射到同一块物理内存上
请多多指教!!
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值