码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【浅学Linux】动态库与静态库的封装与使用


    朋友们好,这里简单介绍一下LINUX学习中关于动态库与静态库的理解,以及站在封装和使用的角度去介绍是如何封装的?如何使用的?

    文章目录

    • 一:动态库与静态库的理解
    • 二:静态库
      • 2.1:静态库的使用
      • 2.2:静态库的封装
    • 三:动态库
      • 3.1:动态库的使用
      • 3.2:动态库的封装

    一:动态库与静态库的理解

    • 静态库:程序在编译链接的时候把库的代码链接拷贝到可执行文件中,程序运行的时候将不再需要静态库。
    • 动态库:程序运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

    我们先来理解几个问题:
    1️⃣:库里面需不需要main函数?
    不需要!

    2️⃣:什么是链接?
    就是把所有的.o文件链接形成一个可执行程序。

    3️⃣:将我的所有.O文件给别人,别人可以使用吗?
    可以!

    4️⃣:你在使用库的时候,需要用到什么?
    库文件和头文件。

    二:静态库

    2.1:静态库的使用

    gcc 或者g++ 只认识系统库,不认识其他第三方库,所以我们想要使用对应的静态库的话,怎么做呢?
    方式一:
    库的安装! 也就是将对应的头文件和库文件拷贝到系统路径下!
    方式二:
    指定路径, 大写的-i 头文件路径 大写的-L 库路径, 小写的l指定库名!
    在这里插入图片描述

    2.2:静态库的封装

    在makefile中,根据对应的依赖关系以及依赖方法生成对应的.a文件和.O文件!
    在这里插入图片描述
    ar是gnu归档工具,rc表示(replace and create)。
    总结一下就是将源文件翻译成.O文件以后把所有的.O文件打包起来即可!

    三:动态库

    3.1:动态库的使用

    编译选项:

    • I:链接动态库,只要库名即可(去掉lib以及版本号)。
    • L:链接库所在的路径。
      示例:gcc main.o -o main -L. -lhello

    方式一:
    库的安装! 也就是将对应的头文件和库文件拷贝到系统路径下!
    方式二:
    导入环境变量的方式, 程序运行的时候,会在环境变量中查找自己需要的动态库路径–LD_LIBRARY_PATH。

    关键点:我们要想使用动态库,一定要让进程找到对应的静态库,因为程序和动态库是分开加载的,属于运行时找库!

    3.2:动态库的封装

    • shared:表示生成共享库格式。
    • fPIC产生位置无关码
    • 库名规则:libxxx.so

    示例:
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    神经网络学习小记录71——Tensorflow2 使用Google Colab进行深度学习
    如何实现虹科物联网HMI与Corvina Cloud 1云平台连接?
    JAVA IO流的原理介绍和流的分类
    391. 完美矩形 扫描线
    开始学习Python的第一天
    Mysql数据库中的用户管理与授权
    基于Vue+SpringBoot的大病保险管理系统 开源项目
    VR全景创业如何开拓市场?如何让创业之路更加顺畅?
    PMP 11.27 考试倒计时31天!来提分啦!
    eclipse创建Maven项目(保姆级教学)
  • 原文地址:https://blog.csdn.net/qq_43727529/article/details/127824764
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号