当前位置: 首页 > news >正文

Linux 动静态库

一、动静态库

1、库的理解

库其实是给我们提供方法的实现,如上面的对于printf函数的实现就是在库中实现的,而这个库也就是c标准库,本质也是文件,也有对应的路径

2、区别

      静态库是指编译链接时,把库文件的代码全部加入到可执行文件中

      动态库:在程序执行时由运行时链接文件加载库,只加载所需要的,节省空间大小

       Linux中:.so(动态库)    .a(静态库)     windows :     .dll(动态库)    .lib(静态库)

        在Linux中只会安装动态库,而静态库需要自己安装

由于gcc编译时默认使用的是动态库,完成的是动态链接,如要实现静态链接就要添加-static

3、命名规则 

  libname.so.xxx,name为c就是c库,c++就是c++库

4、 库的作用

方法的实现就在库当中,库就是将源文件(.c)经过一定的翻译,然后打包,封装然后只提供一个所需的文件,而将其他源文件隐藏

具体的软件的实现  = 头文件中的方法声明 + 库文件提供的方法实现 + 具体代码

二、动静态链接

先讲一个故事方便理解

1、动静态链接

动态链接就是当可执行程序自己完成不了时,就需要跳转到库中,执行库中的方法,执行完后再进行返回

特点:拷贝的是在哪里实现,不拷贝具体的实现方法;动态库只需要一个;可执行程序依旧依赖库;一旦缺失动态库,会影响很多的可执行程序无法正常运行

编译器使用静态库进行静态链接时,会将静态库的所有方法实现拷贝到可执行程序中,使该程序不再依赖静态库

注意点:

  1.如果我们没有静态库,但就要-static  ,是不行的

  2.如果没有动态库,但有静态库,而且gcc能找到,这个是可以的; 因为gcc默认优先动态链接,       而-static的本质就是改变优先级,使所有链接要求变为静态链接,并且只能适配一次

3.所有的链接都是静态链接和动态链接混合使用的

2、优缺点

动态库:优:因为是共享库,可以有效的节省资源(磁盘空间,内存空间,网络空间等)

              缺:一旦缺失,导致各个程序都无法运行

静态库:优:不依赖库,程序可以独立运行

              缺:体积大,比较消耗资源

3、ldd和file 指令

ldd 可以查询文件依赖的动态库    方法:ldd + 文件名

file 可以查询可执行程序是动态链接还是静态链接   方法: file 文件名

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 13.2 MongoDB
  • git连接远程仓库
  • VS2019打开《喜缺全书算法册》附带代码的方法
  • java Collections.singletonList方法介绍
  • 全网最详细的postman接口测试教程,一篇文章满足你
  • 流量录制与回放:jvm-sandbox-repeater工具详解
  • 将控制台内容输出到文本文件
  • HarmonyOS 质量、测试、上架速浏
  • Redis 7.x 系列【30】集群管理命令
  • Android中集成前端页面探索(Capacitor 或 Cordova 插件)待完善......
  • Hadoop 重要监控指标
  • 机械学习—零基础学习日志(高数13——函数类型)
  • vue3 vite 引入包报错 无法找到模块“lib-flexible/flexible.js”的声明文件
  • Elasticsearch面试三道题
  • 【网络世界】HTTP协议
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 《剑指offer》分解让复杂问题更简单
  • C学习-枚举(九)
  • es的写入过程
  • Hexo+码云+git快速搭建免费的静态Blog
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • IDEA常用插件整理
  • Java读取Properties文件的六种方法
  • jQuery(一)
  • MaxCompute访问TableStore(OTS) 数据
  • mysql 数据库四种事务隔离级别
  • Octave 入门
  • PAT A1017 优先队列
  • pdf文件如何在线转换为jpg图片
  • PHP那些事儿
  • 安卓应用性能调试和优化经验分享
  • 对JS继承的一点思考
  • 手机端车牌号码键盘的vue组件
  • 思维导图—你不知道的JavaScript中卷
  • 阿里云API、SDK和CLI应用实践方案
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​你们这样子,耽误我的工作进度怎么办?
  • ‌移动管家手机智能控制汽车系统
  • #NOIP 2014# day.2 T2 寻找道路
  • (1)(1.9) MSP (version 4.2)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (11)MSP430F5529 定时器B
  • (30)数组元素和与数字和的绝对差
  • (4)事件处理——(7)简单事件(Simple events)
  • (Java数据结构)ArrayList
  • (五)网络优化与超参数选择--九五小庞
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转载)利用webkit抓取动态网页和链接
  • .naturalWidth 和naturalHeight属性,
  • .Net 6.0 处理跨域的方式
  • .net mvc部分视图