码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux下如何打包库供别人使用


    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当中
      运行:
      在这里插入图片描述
  • 相关阅读:
    可替代角雷达,这款纯固态补盲激光雷达什么来头?
    Cortex-M架构系统定时器阻塞和非阻塞延时
    音频和视频如何同步?Red Giant PluralEyes Mac
    路由器二次开发一步一步把工业路由器变成一个高端的可指定出网、节点和链路的路由器,包含详细过程及快捷脚本(五)
    Java------Stream流式编程高级API【mapTo、Collectors】(五)
    【产品经理修炼之道】- 企业内部礼品库存管理系统设计(从需求到上线)B端
    Android打造专有hook第二篇,走进规范第一步
    JVM学习二
    再读HorNet论文
    一个程序猿的2023总结:《寻找》
  • 原文地址:https://blog.csdn.net/sqjddb/article/details/126316997
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号