Linux库之静态库与动态库

本文介绍了静态库和动态库的优缺点,包括静态库的快速加载但体积大,以及动态库的小巧易更新但加载慢。详细阐述了静态库与动态库的制作步骤,如静态库的`.a`文件格式和动态库的`.so`文件格式。同时,讲解了动态库的使用,包括通过修改`LD_LIBRARY_PATH`环境变量或`/etc/ld.so.conf`配置文件来引用动态库的方法。
摘要由CSDN通过智能技术生成

1. 优缺点

1.1 静态库

静态库优点:因为已经加载到app当中去,所以加载速度较快,优于动态库。
静态库缺点:程序主体占用较大,且不方便更新维护,更新需将整个程序编译更换。

1.2 动态库

动态库优点:程序主体占用较小,方便更新维护,更新只需将新动态库编译更换即可。
动态库缺点:所以加载速度较慢,劣于静态库。

2. 库的制作及使用

2.1 静态库的命名规则

静态库的文件命名方式为“libxxxx.a”,库名前加“ lib ”,后缀为“ .a ”,“xxxx”为静态库名。

2.2 静态库制作步骤

原材料:源代码.c或.cpp
将 .c文件生成 .o
gcc a.c b.c -c

将 .o文件打包
ar rcs 静态库的名字 原材料
ar rcs libtest.a a.o b.o

2.3 静态库的使用

-l是指定静态库,加上库名xxx ,-L 是告诉编译器从哪里开始寻找库,默认从/usr/lib/ 或/usr/local/lib/下去找。
gcc main.c -ltest -L ./
在这里插入图片描述

2.4 动态库的命名规则

动态库的命名方式与静态库类似,前缀相同,为“ lib ”,后缀变为“ .so ”。所以为“ libtest.so”。

2.5 动态库制作步骤

-fpic 生成与位置无关的代码,用于编译阶段
-shared 指定生成动态库
直接一步生成:gcc -shared -fpic test.c -o libtest.so
在这里插入图片描述

2.6 动态库的使用

gcc main.c -ltest -L ./,跟静态库用法相同。
但注意,动态库没有编译到主程序里,而是每次默认从/usr/lib 下调用动态库,那么需要自己引用动态库。
在这里插入图片描述
方法一:修改LD_LIBRARY_PATH环境变量
特点:这种方法主要处理临时的动态库加载,LD_LIBRARY_PATH环境变量修改后,只能是对当前的用户生效。

LD_LIBRARY_PATH的作用:这个环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。
在这里插入图片描述

具体步骤:

1、找到动态库所在路径:sudo find / -name “[动态库名字]”

2、打开~/.bashrc文件

3、在该文件最后一趟添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[动态库所在的绝对路径]

4、source ~/.bashrc

方法二:修改/etc/ld.so.conf配置文件
特点:对所有用户生效。不是每个操作系统都有这个配置文件,就Ubuntu系统有。

/etc/ld.so.conf的作用:记录了程序加载运行期间查找动态链接库时的路径。

具体步骤:

1、找到动态库所在路径:sudo find / -name “[动态库名字]”

2、打开/etc/ld.so.conf文件:sudo vi /etc/ld.so.conf

3、在最后一行添加动态库的绝对路径

4、重新加载/etc/ld.so.conf文件:sudo ldconfig -v
可参考这篇文章如何调用动态库
在这里插入图片描述
如上配置环境变量可配合shell脚本使用,需加可执行权限。如chmod +x test.sh

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值