静态库和动态库

静态库和动态库

一、静态库

​ 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。 因此调用静态库的可执行文件一般占用内存较大。

.o文件是静态库最小加载到执行文件代码的最小单位,链接时只会将包含用到函数的.o文件链接进来,并不会链接整个静态库。

1.静态库的优缺点

优点:

  1. 发布程序的时候,不需要提供对应的库实现
  2. 加载库的速度快

缺点:

  1. 库被打包到应用程序中,导致库的体积很大
  2. 库发生改变时,需要重新编译程序

2.库的命名规则

  • 命名规则:lib+库的名字+.a,例如:libmytest.a

3.制作步骤

  1. 将.c文件生成对应的.o文件:

在这里插入图片描述

  1. 将生成的.o文件打包:ar rcs 静态库的名字 生成的所有.o

在这里插入图片描述

  1. 发布静态库(lib)和头文件(include)给用户即可

二、动态库

1.动态库的优缺点

优点:

  1. 执行程序体积小
  2. 动态库更新了,不需要重新编译程序

缺点:

  1. 发布程序的时候,需要提供动态库给用户
  2. 动态库没有被打包到程序中,加载速度相对较慢

2.库的命名规则

命名规则:lib+名字+.so

动态库的代码存放在共享库段,只有在运行的时候才会调用该段代码

3.制作步骤

制作过程:

  1. 生成与位置无关的.o文件(.o):gcc -fPIC -c *.c -I …/include

  2. 将.o打包成共享库:gcc -shared -o libMy.so *.o -I include

  3. 共享库的使用:需要通过动态链接器根据环境变量查找动态库

    1、gcc main.c lib/libMy.so -o app -Iinlude

    2、gcc main.c -Iinclude -L lib -l My app -o app

    不可以直接将动态库放到/lib

    1、可以通过export LD_LIBRARY_PATH=./lib,将当前动态链接库导入到LD_LIBRARY_PATH路径,只能临时有用,将终端关掉则不生效

    2、如果要永久生效,则需要在~/.bashrc文件里导入数据,因为终端在启动的时候都会读一下.bashrc,修改完后需要重启终端
    在这里插入图片描述

    3、需要找到动态链接器的配置文件:vi /etc/ld.so.conf

    ​ 将动态库的路径写到配置文件中

在这里插入图片描述

​ 更新 sudo ldconfig -v

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值