• Linux下如何打包库供别人使用


    动态库和静态库的概念

    库是已写好的、可复用代码,每个程序都要依赖很多基础的底层库,比如我们常用的C语言库、C++库。
    本质上,库是一种可执行的二进制代码。
    库分为两种:静态库(libxx.a) 和 动态库 (libxx.so) xx是库名

    动态链接时用到动态库,静态链接时用到静态库

    什么是动态链接和静态链接

    Linux形成可执行程序默认是动态链接的:
    在这里插入图片描述
    使用静态链接:
    在这里插入图片描述
    新版本的linux不会安装libc.a. 只安装libc.so. 所以当使用-static时,libc.a不能使用。

    解决方法
    安装glibc-static

    sudo yum install glibc-static
    
    • 1

    打包并使用静态库

    写两个有简单功能的源程序:
    在这里插入图片描述
    使用gcc 的 -c选项 生成源程序对应的 .o 文件,然后打包形成静态库:
    blog.csdnimg.cn/8288850fd5254434866a1f0e0e196bed.png)
    这样,只要别人有libmymath.a库以及头文件add.h和sub.h,使用时候在源程序中包含头文件即可使用函数ADD和SUB!

    例如,使用我们刚才打包的库,计算11+22:
    在这里插入图片描述
    平时我们gcc编译没有加上图的选项是因为我们需要的头文件和库文件在Linux默认的头文件或者库文件搜索路径下,-I(大i)和-L的含义就是,在我们指定的路径下也要搜索。如果我们把自己写的头文件和库文件添加到默认搜索路径,就不用带选项编译了,但是我们写的程序不能保证不污染其他头文件和库文件。-l(小写l)选项是库名,使用第三方库时候要带上

    可参考:
    头文件和库文件搜索路径

    打包并使用动态库

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    运行时候报错了,原因是,这里是动态链接,虽然gcc编译时候可以找到动态库,但是运行时候系统找不到库文件。

    解决方法:

    1. 把库文件和头文件添加到各自默认搜索路径下,但是有一定可能污染其他头文件和库文件
      本质上我们下载高人写好的库就是把库文件和头文件拷贝到了头文件和库文件默认搜索路径下
    2. 配置环境变量
      在这里插入图片描述
      把动态库的路径添加到环境变量LD_LIBRARY_PATH当中
      运行:
      在这里插入图片描述
  • 相关阅读:
    Python数据库编程之关系数据库API规范
    P8739 [蓝桥杯 2020 国 C] 重复字符串
    代码随想录三刷day37
    c语言---指针
    DAST 黑盒漏洞扫描器 第四篇:扫描性能
    DXF笔记:多义线的绘制
    解决Ubuntu系统字体太小的问题
    基于SSM的物流仓储管理系统
    强连通,奇怪的缩点学习笔记?
    读书笔记--未来简史关键金句和阅读感悟
  • 原文地址:https://blog.csdn.net/sqjddb/article/details/126316997