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

ATT汇编总结_9_静态库与动态库

文章目录

  • 库的生成
    • 静态库生成
    • 动态库生成
  • 库的使用
    • 静态库的使用
    • 动态库的使用
  • 对比
    • 使用流程对比
    • 生成的可执行文件对比

库的生成

静态库生成

静态库(.a)的实质就是目标文件的打包集合(.o)
生成静态库的语法:ar r [静态库全称] [需打包的目标文件序列]

动态库生成

动态库(.so)也是目标文件的打包集合(.o),但加载时机不同(与静态库相比)
生成动态库的语法:gcc -shared -o [动态库全称] [需打包的目标文件序列]
补充:
动态库全称由四部分组成:lib + 库名称 + 版本号 + .so

库的使用

静态库的使用

静态库的使用方法与使用目标文件的方式相同,只需要在编译时加上静态库即可

动态库的使用

编译时使用-L参数指明链接器的搜索目录,-l参数指明所使用的动态库,此处的动态库名称为库名称+版本号

由于动态库是在程序加载时使用,所以在运行程序时需要通知链接器动态库的所在目录
临时有效:
export LD_LIBRARY_PATH=“$LD_LIBRARY_PATH:[动态库所在目录]”
长期有效:
在/etc/ld.so.conf配置文件中添加动态库目录
然后以root用户身份运行ldconfig,更新ls.so.cache

对比

使用流程对比

静态库在目标文件进行链接时,与目标文件链接成可执行文件
动态库在目标文件进行链接时,不与目标文件链接成可执行文件,而是在加载进入内存运行时,直接跳转至指定动态库地址执行

生成的可执行文件对比


可以看到静态库生成的可执行文件比动态库生成的可执行文件大了数十倍,由此,可见动态库的优势
静态库的优势就是执行较快,且独立执行不依赖于外部文件(指动态库)

相关文章:

  • Vue3实战笔记(19)—封装菜单组件
  • vscode无法连接 , .vscode-server版本问题
  • 数据分离和混淆矩阵的学习
  • 二叉树的前序、中序、后序遍历
  • js-vue页面路由跳转(存入缓存)-多个复杂循环跳转返回
  • Linux提权--SUDO(CVE-2021-3156)Polkit(CVE-2021-4034)
  • mysql数据库优化及sql调优,Java后端社招面试经历
  • 微信小程序的医院体检预约管理系统springboot+uniapp+python
  • RK3568平台 RTC时间框架
  • VUE基础知识九 ElementUI项目
  • yolov9 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署
  • unity 场景烘焙中植物叶片(单面网络)出现的白面
  • VS Code For Web 深入浅出 -- 导读篇
  • 设计模式(一)前言
  • MyBatis
  • CAD机械零件平面绘制练习六
  • 相比Vue和React,Svelte可能更适合你
  • HTTP/HTTPS/TCP原理
  • 基于TCP的socket API,让你拥有另一套自己的服务器~
  • 关于IO的探究:BIO、NIO、AIO(未完待续)
  • API接口名称(item_search - 按关键字搜索淘宝商品)[item_search,item_get,item_search_shop等]
  • 拥抱云原生,Java与Python基于gRPC通信
  • 【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件
  • 【C语言】-字符串函数和内存函数(下)
  • r语言使用rjags R2jags建立贝叶斯模型|附代码数据
  • wifi码小程序全面分析
  • 使用小程序实现图表(圆饼图、柱状图、折线图)
  • 自动驾驶如何面对恶劣天气问题?景联文科技提供相关数据标注服务
  • 微服务项目架构演变过程
  • 搭建线性网络对MNIST数据集进行训练、测试,并且预测图片
  • 【HTML+CSS】静态网页设计期末大作业——我的家乡无锡印象
  • @Cacheable和@CacheEvict的学习使用