库文件的生成和使用

一、库文件

库是一组预先编译好的函数方法的集合

Linux上库文件的存放位置: /lib/usr/lib

库分为两种:静态库和共享库

Linux上静态库标识(libxxx.a),共享库(libxxx.so)

Windows上静态库标识(.lib),共享库(.dll)

二、静态库的生成和使用

1)静态库的生成

这里有生成静态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明

如何生成静态库?

第一步:将静态库需要的".c"文件进行编译,生成"".o"文件,示例如下:

第二步:通过命令ar,将静态库需要的的“.o"文件生成静态库

ar命令:

  • c   创建一个库文件
  • v   显示命令执行过程
  • r    向库文件中添加方法(.a)
  • t    查看静态库中由哪些“.o”组成

2)静态库的使用 

一个测试文件“main.c”,具体代码为:

 我们也可以将max.c 和add.c加入到程序后面调用

但是我们也可以使用静态库解决这一问题

- L:库所在路径

- l :库的名称(开头的Lib和 .a不需要写)

 三、共享库的生成与使用

1)共享库如何生成

这里有生成共享库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明

 第一步:将共享库需要的".c"文件进行编译,生成"".o"文件,示例如下:

第二步:通过gcc命令将第一步生成的所有“.o”文件,生成共享库

命令:

  • -shared 命令gcc生成共享库
  • -fPIC  说明共享库使用相对地址

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

两种方式生成的静态库没有区别

 2)共享库如何使用

  • -L:共享库所在的链接路径
  • -l :共享库的名称(libxxx.so,lib和.so不要写,只写xxx)

测试文件main.c

 现在生成了两个可执行文件main,a.out,现在运行

 原因如下:因为编译器运行时,会直接去/usr/lib里面找共享库,找不到就会报错

解决方法:我们可以将共享库在/usr/lib中拷贝一份

 假设,当前路径下有同名的静态库和动态库,那么这个时候,可执行文件用的是静态库还是动态库?

结论:如果存在同名,默认链接的是动态库

四、静态库和共享库的区别

共享库的优势:因为链接共享库的可执行文件,在执行的时候才会去看共享库,所以如果修改代码,只需要改共享库即可,可执行文件不需要修改。

静态库的优势:比动态库执行速度快,静态库生成的可执行文件不再需要原先的静态库

总结:

  • 静态库是在链接时将用到的方法包含到最终生成的可执行程序中
  • 共享库不包含,只做标记(说明运行时需要的共享库在哪,但是共享本体是不包含的),在运行程序时,才动态加载

五、如何查看可执行文件用到哪些共享库

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值