静态库和动态库

静态库:
1>命名规则:lib+名字+.a (例如:libmytest.a)
2>制作步骤:
1)生成对应的二进制文件.o :gcc *.c -c
2)将二进制文件.o打包成静态库:ar rcs +静态库的名字 +生成的所有的.o文件
3>发布静态库:(静态库+头文件)
4>使用静态库:假设主函数在main.cru,头文件目录在include,静态库目录为lib,生成可执行程序app实现如下:
方法一:gcc main.c -I./include -L./lib -l mycal -o app
方法二:gcc main.c -I/include ./lib/libmycal.a -o app
查看静态库的内容: nm libmucal.a
3>静态库的打包过程在这里插入图片描述
静态库的优缺点:
优点:
1)发布程序时,不需要提供对应的库(库已经被打包到可执行程序里)
2)库的加载速度快
缺点:
1)库被打包到应用程序中,导致库的体积很大
2)如果库发生了改变,需要重新编译程序

动态库
1>命名规则:lib+名字+.solibmytest.so)
2>制作步骤:
1)生成与位置无关的代码(生成与位置无关的.o文件)
gcc *.c -fPIC -c -I ./include *.c
2)将.o文件打包成动态库
gcc -shared -o libmycal.so *.o
3>发布和使用动态库
方法一:gcc main.c -I./include -L./lib -l mycal -o app
方法二:gcc main.c -I/include ./lib/libmycal.so -o app
查看可执行程序执行时依赖的动态库:ldd app
4>解决程序执行时动态库无法被加载的问题
1)放到系统的库目录(/lib),不推荐,可能会把系统库给覆盖掉
2)临时测试
环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量
LD_LIBRARY_PATH=./lib
将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH
当终端关闭, 设置会失效
3). 不常用的方法(永久设置):
在家目录的 .bashrc文件 中添加一句话: export LD_LIBRARY_PATH=动态库目录的绝对路径
.bashrc修改完成, 需要重启终端
4).
1. 需要找动态连接器的配置文件 – /etc/ld.so.conf
2. 动态库的路径写到配置文件中 – 绝对路径
3. 更新 – sudo ldconfig -v
5>动态库的优缺点
优点:
1)执行程序体积小
2)动态库更新了,不需要重新编译程序(前提函数接口没变)
缺点:
1)发布程序时,需要将动态库提供给用户
2)动态库没有被打包到应用程序中,加载速度相对较慢
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值