静态库和动态库的使用

本文详细介绍了静态库(如libmycalc.a)和动态库(libmycalc.so)的命名规则、制作步骤,以及如何在编译时指定头文件和库的位置,以及动态库的加载与管理,包括临时设置LD_LIBRARY_PATH和创建启动脚本的方法。
摘要由CSDN通过智能技术生成

静态库

静态库的命名规则

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

前期准备

工作目录下"include"文件夹用来存放头文件,"src"文件夹用来存放源代码,"lib"文件见用来存放静态库文件,还有一个"main.c",总共四个文件 

制作步骤

1.生成 ".o" 文件

gcc mytest.c -c -I ../include/
                -I 指明头文件head.h所在目录

2.将 ".o" 文件生成静态库文件

ar rcs libmycalc.a calculate.o

3.将静态库文件 "libmycalc.a" 移入库目录 "lib"

只需要把"include"和"lib"两个文件夹发给别人即可

4.静态库的使用

gcc main.c -I ./include/ -L ./lib/ -lmycalc -o test

            -I 指定头文件位置
            -L 指定静态库文件位置
            -l静态库名字(静态库文件linmycalc.a,静态库mycalc)

动态库

动态库的命名规则

与静态库类似, 库名前加 “lib” ,后缀用 “.so” ,“xxx” 为静态库名。

制作步骤

1.生成 ".so" 文件

gcc -fpic -shared calculate.c -I ../include/ -o libmycalc.so

2.将动态库文件 "libmycalc.so" 移入库目录

3.动态库的使用

gcc main.c -I ./include/ -L ./lib/ -lmycalc -o test

4.动态库加载问题

此时无法运行指令./test,需要加载动态库。

方法一:将动态库拷贝到默认目录 /usr/lib/ 
sudo cp ./libmycalc.so /usr/lib/
方法二:临时设置环境变量来指定动态库的搜索路径
export LD_LIBRARY_PATH="/home/pi/mydemo/libdemo/lib"

每次设备重启都要再次设置环境变量。

创建一个.sh脚本

export LD_LIBRARY_PATH="/home/pi/mydemo/libdemo/lib/动态库的路径"
./test//所要执行的程序名称
chmod +x start.sh
//给脚本加可执行的的权限
./start.sh
//执行该脚本

 

 

静态库动态库使用上有以下区别。静态库在编译时会被链接到应用程序中,因此在运行时不需要依赖外部的库文件,加载速度较快。同时,静态库被打包到应用程序中,方便部署和发布,并且移植性较好。然而,静态库会消耗系统资源和浪费内存,更新、部署和发布过程较为繁琐。 相比之下,动态库在运行时需要加载外部的库文件。这使得动态库具有更好的更新、部署和发布的灵活性。同时,动态库可以实现进程间资源共享,可以在运行时控制何时加载动态库,提高了系统的灵活性。然而,动态库的加载速度相对较慢,并且在发布时需要提供依赖的动态库。 因此,在使用上,静态库适合于需要快速加载和移植性较好的场景,而动态库适合于需要灵活更新和部署的场景。根据具体的需求和项目情况,选择合适的库类型可以提高应用程序的性能和可维护性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [静态库动态库使用与区别](https://blog.csdn.net/xiaobai_xuec/article/details/125322353)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.268^v1^koosearch"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值