静态库与动态库

静态库与动态库

学习目的:

掌握静态库与动态库的制作方法


静态库(.a):

在可执行程序运行前就加入到执行代码中。
静态库制作步骤如下:

  • 将.c生成.o文件:gcc -c 文件名.c -o 文件名.o
    在这里插入图片描述
  • 使用ar工具库制作静态库:ar rcs lib库名.a 文件名.o
    在这里插入图片描述
    -编译到静态库到可执行文件中:gcc 文件名.c lib库名.a -o a.out
    在这里插入图片描述

动态库(.so):

在执行程序启动时加入到执行程序中,可以被多个程序共享使用。
动态库制作步骤及使用:

  • 将.c生成.o文件(生成与位置无关的代码 -fPIC):gcc -c 文件名.c -o 文件名.o
    在这里插入图片描述

  • 使用gcc -shared 制作动态库:gcc -shared -o lib库名.so 文件名.o
    在这里插入图片描述

  • 编译可执行程序时,指定使用的动态库。-l:指定库名(去掉lib前缀和.so后缀) -L:指定库路径

  • gcc 文件名.c -o a.out -l 库名 -L 库路径
    在这里插入图片描述

  • 运行可执行文件时出错解决办法在这里插入图片描述

  • 原因:

    • 链接器:工作于链接阶段,工作时需要-l和-L.
    • 动态连接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置
  • 解决方式

    • 通过环境变量 :export LD_LIBRARY_PATH = 动态库路径(临时生效,终端重启时失效)

    • 写入终端配置文件,永久生效 .bashrc 使用绝对路径。

      • vi ~/.bashrc

      • 写入 export LD_LIBRARY_PATH = 动态库路径 保存
        在这里插入图片描述

      • . .bashrc/ source.bashrc 重启终端 让修改的.bashrc生效
        在这里插入图片描述

      • 执行程序
        在这里插入图片描述

    • 拷贝自定义动态库到/lib (标准C库所在目录)

    • 配置文件法

      • sudo vi /etc/ld.so.conf
      • 写入动态库绝对路径 保存
      • sudo ldconfig -v 使配置文件生效
      • 执行程序 --使用ldd a.out 查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值