linux库

文章详细介绍了Linux系统中静态库和动态库的概念、区别以及制作与使用方法。静态库在编译时集成到程序中,独立运行但可能导致程序体积大;动态库在运行时加载,节省空间但依赖于系统环境。制作静态库涉及ar和gcc命令,动态库则使用gcc的-shared选项。在选择使用哪种库时,需考虑程序需求和资源管理。
摘要由CSDN通过智能技术生成

一、静态库与动态库的区别

在Linux系统中,静态库(Static Library)和动态库(Dynamic Library)都是常见的软件库形式,用于存放已编译的代码和函数,供程序在运行时调用。它们之间有以下区别:

静态库:

- 静态库在编译时被链接到目标程序中,成为目标程序的一部分。链接过程将静态库的代码和数据复制到目标程序,使得目标程序在运行时不再依赖于该静态库的存在。
- 优点:静态库的主要优点是独立性强,嵌入到目标程序中,避免了对外部库的依赖。这种方式通常适用于小型应用程序,或者需要确保特定版本库的使用情况。
- 缺点:随着程序规模的增长,静态库可能导致目标程序过大,占用过多的磁盘空间。此外,如果多个程序使用同一个静态库,每个程序都会拷贝一份该库,造成资源浪费。

动态库:

- 动态库是一个单独的文件,与目标程序分离。在程序运行时,动态库通过动态链接器(如ld.so)加载到内存中,并与程序进行链接和解析。不同的程序可以共享同一份动态库,节约了磁盘空间和内存消耗。
- 优点:动态库的主要优点是节约系统资源,提高程序的共享性和可维护性。如果某个动态库更新,所有依赖该库的程序都可以受益于该更新,无需重新编译目标程序。
- 缺点:动态库的使用依赖于库的可用性和正确版本的安装。如果某个动态库在系统中缺失,或者版本不兼容,程序可能无法正常运行。

总结:
- 静态库在编译时被链接到目标程序中,独立存在,增加了目标程序的体积。
- 动态库在程序运行时加载,并与程序共享,节约空间但需要注意可用性和版本问题。
- 使用静态库时,程序与库的关系更紧密,而使用动态库时,程序与库的关系更松散。

在实际应用中,通常根据需求和具体情况选择使用静态库还是动态库。

二、静态库的制作与使用

静态库的格式:libhello.a

步骤:

gcc hello.c -c                           //生成hello.o

ar rcs libhello.a hello.o            //将hello.o生成静态库libhello.a

使用(掐头去尾,把前面的lib和后面的后缀.a去掉):

编译时:gcc 主程序.c -lhello -L ./

-L ./的作用:优先从当前路径寻找库,再去默认库路径寻找

三、动态库的制作与使用

动态库格式:与静态库类似,前缀为“lib”,后缀变为“.so”,libhello.so

步骤:

gcc -shared -fpic hello.c -o libhello.so

使用:

先将libhello.so拷贝到 /usr/lib/

编译:gcc 主程序.c -lhello -L ./

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值