2022.4.26 Linux基础——库文件的生成和使用

七. 库文件的生成和使用

1.什么是库文件?

库是一种预先编译好的函数方法的集合
Linux上库文件的存放位置:/lib和/usr/lib
库分为两种:静态库和共享库
Linux上静态库标识(libxxx.a);共享库标识(libxxx.so)
Windows上静态库标识(.lib);共享库(.dll)

2.静态库的生成和使用

2.1 静态库的生成

这里有生成静态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明。
第一步:将一会静态库需要的“.c”文件进行编译,生成“.o”文件,示例如下:

第二步:通过命令ar,将这里的“.o”文件生成静态库:
c——创建一个库文件
v——显示命令执行过程
r——向库文件中添加(.a)
t——查看静态库中间由哪些“.o”文件组成

2.2 静态库的使用

有一个测试文件“main.c”,其中具体代码为:
-L:库所在路径
-l:库的名称(开头的lib和后缀.a不要写)

3.动态库的生成和使用

3.1 共享库如何生成

这里有生成动态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明。
第一步:将一会动态库需要的“.c”文件进行编译,生成“.o”文件:
第二步:通过gcc命令将第一步生成所有“.o”文件,生成共享库
-shared:命令gcc生成共享库
-fPIC:说明共享库使用相对地址

命令格式:gcc -shared -fPIC -o libxxx.so *.o

3.2 共享库如何使用

有一个测试文件“main.c”,其中具体代码为:
-L:共享库所在链接路径
-l:共享库的名称(注意:开头的lib和后缀.a不要写)

这时,有两个可执行文件main,a.out,运行后发现系统报错,报错:用到的共享库没有发现
原因:因为编译器跑的时候,会去/usr/lib里面找这个共享库,找不到共享库就会报错,那么只需要将使用的共享库存放/usr/lib里即可:
假设,当前路径下有同名的静态库和动态库,那么这时候,可执行文件是静态库还是动态库?
结论:如果存在同名,默认链接为动态库

4.静态库和共享库的区别

共享库的优势:因为链接共享库的可执行文件,在执行的时候才会去看共享库,所以如果修改代码,只需要修改共享库即可,可执行文件不需要修改;因此共享库所占体积比较小。
静态库的优势:比动态库执行速度快;静态库生成的可执行文件不再需要原先的静态库,运行速度快。

总结:

静态库是在链接阶段时将使用的方法包含到最终的可执行文件中;
共享库不包含,只会做标记(说明运行时需要的共享库在那,但是共享库本体是不包含的),然后在运行阶段,才会去动态链接。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值