静态库和动态库的制作与使用

本文详细介绍了静态库和动态库的制作过程,包括命名规则、生成步骤及使用方法。对于静态库,其优点是无需提供库文件,加载速度快,但会导致程序体积大;动态库则能减小程序体积,便于库更新,但需要在运行时加载,速度相对较慢。此外,还阐述了动态库的动态链接和不同加载方式。
摘要由CSDN通过智能技术生成

静态库的制作:

1.命名规则:
lib+库名+.a eg:libmyku.a
2.制作步骤

  • 生成 .o文件 gcc -c *.c
  • 将生成的.o 文件打包 ar rcs +库名(libmyku.a)+所需的.o文件
    eg: 1: gcc -c *.c 2: ar rcs libmytest.a *.o
    本质:提供一个静态库和一个头文件 该头文件包含有所库中的函数接口,该库中包含所有的函数实现(以库的形式提供,从而不提供原码)
    在这里插入图片描述
    include :提供的头文件 lib: 为需提供的静态库 mian.c:为提供的测试库的测试程序
    src:为源代码 ,一般不用提供
    3.库的使用
    法一:gcc main.c lib/libmyku.a -o main
    法二: gcc main.c -L lib -l myku -o main 解释-L:库的路径 -l : 库名 需要插头(lib)去尾 (.a)
    4.静态库的优缺点
    优点:
  • 当使用过该静态库源程序编译时,会打包静态库到在源程序中,所以程序发布时不需要提供静态库
  • 其加载库的速度快
    缺点:
  • 导致程序体量太大
  • 如果库发生改变,需要重新编译源程序

动态库(共享库)的制作:

1.命名规则:
lib+库名+. so eg:libmyku.so
2.制作步骤

  • 生成与位置无关的.o文件 gcc -fPIC -c *.c
  • 打包所有的.o文件 gcc -shared -o libmyku.so *.o

    动态库是在程序运行时加载到虚拟内存中的共享库区
    动态链接库由于是在程序运行是才加载的,所以必须用到一个动态链接器辅助加载
    ldd app(可执行程序)可以查看可执行程序的所使用的动态链接库有那些
    3.库的使用
  • 1.放到系统的库文件中,不推荐使用,万一与系统库文件重名
  • 2.export LD_LIBRARY_PATH=动态库的绝对路径 终端关闭,环境变量就失效,仅仅临时测试
  • 3.在家目录下的.bashrc文件下添加export LD_LIBRARY_PATH=动态库的绝对路径,需重启终端
  • 4.推荐使用 在/etc/ld.so.conf中添加export LD_LIBRARY_PATH=动态库的绝对路径,在更新sudo ldconfig -v 即可永久生效
    执行后上述操作中任意一种后
    法一:gcc main.c lib/libmyku.a -o main
    法二: gcc main.c -L lib -l myku -o main 解释-L:库的路径 -l : 库名 需要插头(lib)去尾 (.a)
    4.动态库的优缺点
    优点:
  • 执行程序体量小
  • 动态库变化时,只有接口不变,不需要重新编译源程序
    缺点:
  • 发布程序时需要将动态库提供用户
  • 动态库没有打包到程序中,加载速度相比静态库慢
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值