【Linux】静态库和动态库的生成与使用

静态库动态库的生成与使用 :【 多图预警

  • 动态库的生成(重点)
  • 静态库的生成(重点)
  • 查看动态库和静态库的汇编代码进行对比(了解)
  • 库的使用(重点)
    • 链接的时候使用库(重点)
    • 运行的时候使用库(重点)
  • 查看当前程序所依赖的库(了解)

本节课重要的原因:以后的使用大多数都是使用现成的动态库和静态库,在本文章我们以加法add()函数建一个动态库和静态库,分过程讲解动态库和静态库的生成与动态库使用。,使用动态库讲述链接与运行加载库的过程(静态库的链接与动态库一样,不一样的是静态库运行时不需加载静态库

库文件: 把所用到的所有代码的实现打包成一个文件。库中的代码没有main函数(和可执行程序的区别)

动态库的生成

动态库的命名:一般的动态库命名:lib().so 。 ()里面是动态库起的名字,以lib作为开始,以.so表明它是动态库
生成动态库:使用gcc
第一步: gcc-fPIC -c add.c -o add.o
第二步: gcc --share add.o -o libadd.so
讲解:gcc -c add.c -o add.o 普通的来讲 gcc add.o -o add 生成可执行程序了 没有main函数就会报错,有了main函数就不能生出库
所以:要写成gcc --share add.o -o add.so的形式

动态运行的时候加载,加载到内存之后,需要在多个程序中都要去使用。这样我们需要理解一个程序的运行需要将内存中的代码和数据映射到进程虚拟地址空间中映射到虚拟地址空间去才能访问,这个动态库需要映射到各个库独立的虚拟地址空间中去才能被访问,生成库的时候有自己的信息,映射的时候 ,无法保证每个程序都将它映射到虚拟地址空间中的同一位置,所以动态库就不能用于每个程序,所以要加上fPIC 产生位置无关的代码,库映射到虚拟地址空间的同一位置,每一个函数进行计算的时候拿偏移量+首地址就能得到,便于映射到每一个程序中(了解)。

在这里 我们把加法函数建一个动态库和静态库去使用和讲解
新建一个add.c文件

  1 #include <stdio.h>
  2 int main 
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值