Linux下静态库和动态库的制作

一、静态库的制作

  1. 命名规则

    lib+库的名字+.a 例如:libmytest.a

  2. 制作步骤
    2.1、.c文件生成对应的.o文件 gcc *.c -c
    2.2、将生成的.o文件打包

    ar rcs + 静态库的名字(libmytest.a) + 生成的所有的.o

  3. 发布和使用静态库
    3.1、发布静态库(lib)
    4.2、头文件(include)

    用户的使用有下面两种使用方式:

    gcc  + 源文件 +  静态库文件 -o +可执行程序 -I头文件
    gcc  main.c   lib/libtest.a   -o   sum   -Iinclude
    
    gcc  + 源文件 -I头文件 -L   静态库的目录 + 库名 -o+ 可执行程序
    gcc   main.c   -Iinclude  -L   lib   -l   MyCalc   -o   app
    
  4. 查看静态库

    nm+静态库 nm libMyCalc.a
    nm+可执行程序

  5. 静态库的优缺点

    优点:
    a、发布程序的时候。不需要提供对应的库
    b、加载库的速度
    缺点:
    a、库被打包到应用程序中,导致库的体积很大
    b、库发生了变化,需要重新编译程序

  6. 实现过程过程:
    在这里插入图片描述

二、动态库的制作

  1. 命名规则

    lib+库的名字+.so (类似与Windows下的dll文件)

  2. 制作步骤
    2.1、生成与位置无关的代码(生成与位置无关的.o) gcc -fPIC -c *.c -I../include
    2.2、将.0打包成共享库(动态库)
    gcc -shared -o libMyCalc.so *.o -I../include

  3. 发布和使用静态库
    3.1、发布静态库(lib)
    4.2、头文件(include)

    用户的使用方式有下面两种:

    gcc  + 源文件 +  动态库文件 -o +可执行程序 -I头文件
    gcc main.c lib/libtest.so -o app -Iinclude  //运行./app,正确
    
    gcc  + 源文件 -I头文件 -L   动态库的目录 + 库名 -o+ 可执行程序
    gcc main.c -Iinclude -L lib -l MyCalc -o app   //运行./app,错误无法找到动态链接库
    

    在这里插入图片描述

  4. 解决动态库失败的问题

  • 1)、放到库目录中(不推荐使用
    将动态库cp(拷贝)到系统lib下sudo cp lib/libMyCalc.so /lib,可以通过ldd 可执行文件来查看
    这样存在缺点,如何你自己的动态库和系统的动态库一样这样不就是存在错误。不推荐使用

  • 2)、临时设置
    配置LD_LIBRARY_PATH环境变量,将动态库的路径配置到环境变量中

    echo $LD_LIBRARY_PATH //打印环境变量
    export  LD_LIBRARY_PATH=相对路径
    export  LD_LIBRARY_PATH=./lib
    这样的设置是临时的.在终端关闭设置就会失效,在制作的过程中使用。
    
  • 3)、不常用的方法(永久设置
    修改家目录下.bashrc的配置文件的内容,在修改完成之后需要重启终端
    在最后一行添加:export LD_LIBRARY_PATH=绝对路径
    ```export LD_LIBRARY_PATH=/home/ubuntu/Linux代码/Calc``

  • 4)、需要找到动态连接器的配置文件,将动态库的路径写到配置文件中,然后在进行更新已经显示操作
    使用命令sudo ldconfig -v
    sudo vim /etc/ld.so.conf

  1. 动态库的有点

    优点:
    a、执行程序体积小
    b、函数接口不变的情况下,动态库更新了,不需要编译程序
    缺点:
    a、发布时需要将动态库提供给用户
    b、动态库没有被打包到应用程序中,加载速度相对比较慢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值