码农知识堂 - 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当中
      运行:
      在这里插入图片描述
  • 相关阅读:
    Python:温度转换(摄氏度与华氏度)
    JavaScript基础
    数据分析 - CASE专题
    centos7下安装无头浏览器(headless Chrome)
    [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-032(CVE-2016-3081)
    前端面试宝典~Symbol、相同的Set、Getter、控制动画、js中哪些操作会造成内存泄漏?等......
    「实践篇」解决微前端 single-spa 项目中 Vue 和 React 路由跳转问题
    【datawhale202206】pyTorch推荐系统:召回模型 DSSM&YoutubeDNN
    Linux嵌入式I2C协议笔记
    Mysql密码忘记修复
  • 原文地址:https://blog.csdn.net/sqjddb/article/details/126316997
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号