• Linux篇13动静态库


    1.动静态块的基本原理

    动静态库本质上是可执行程序的“半成品”

    代码编译分为四个阶段

    • 预处理: 生成.i文件,还是c代码
    • 编译:生成.s文件 汇编语言
    • 汇编:生成.o文件 二进制文件
    • 链接 bin 真正的可执行程序

    我们将一群.o文件打包就变成了库 (.so/ .a)。所以库的本质是一堆.o的集合,不包含main,但是包含了大量的方法

    2.认识动静态库

    静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。相当于将库的代码拷贝到你的代码里面,使你的可执行文件变大。
    动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

    image-20220704202119007

    在Linux下 .so为动态库,.a为静态库

    在Windows下, .dll为动态库,.lib为静态库

    libc.so.6 ,lib和.so之间的就是库名,所以该库是c动态库

    3.动静态库的特征

    image-20220704204650435

    4.如何制作动静态库

    • 首先都要生成.o文件

      image-20220704221215573

    • 生成.a .so 文件

      image-20220704221249572

    • 打包(.h文件和库文件(.a/.so))

      image-20220704221923219

      image-20220704221939613

    • 使用动静态库

      1. 编译

        1. image-20220704223930331

        _I 后面接头文件目录, -L后面接库路径, -l后面接具体哪个库

      2. 运行可执行程序

        静态链接的可执行程序能直接运行,动态链接的不行,因为操作系统找不到动态库

        需要导入环境变量 export LD_LIBRARY_PATH= LD_LIBRARY_PATH:“.so文件的路径”

    rt LD_LIBRARY_PATH= LD_LIBRARY_PATH:“.so文件的路径”

  • 相关阅读:
    redis知识总结
    Http客户端--Feign简介
    输入神经网络的数据类型要求,神经网络数据格式
    基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统
    06-ServletRequest
    2021江苏省赛热身赛 C Magic Rabbit(数形结合)
    Pytorch学习笔记 (参考官方教程)
    网络基础知识点
    TensorRT简介
    MoveIt的【Use Cartesian Path】选项及computeCartesianPath函数
  • 原文地址:https://blog.csdn.net/btzxlin/article/details/125610269