动静态库的区别

news2024/10/6 20:25:32

(5条消息) linux-动态库制作与使用_云的小站的博客-CSDN博客

(5条消息) linux-静态库制作与使用_云的小站的博客-CSDN博客

目录

编译区别

使用不同编译的可执行程序。

推荐使用动态链接

动态链接具有以下优缺点


编译区别

动态库:代码不加载到可执行程序中,而是在可执行程序中声明该程序依赖为该动态库。

静态库:一股脑将库加载到可执行程序中。

注意点

一个可执行程序可能用到许多的库,这些库运行有的是静态库,有的是动态库,而我们的编译默认为动态链接库,只有在该库下找不到动态.os的时候才会采用同名静态库

 我们也可以gcc设置静态链接程序。

gcc main.c -I ./output/include/ -L ./output/lib/ -lhello -o main_jj -static

虽然可以成功,但是除非想程序独立,否者不要这样使用,否者我们的可执行程序会非常的大。

 会发现main_jj非常的大!842k大小

而main_j与main_d 的较小,但是main_j>main_d 因为main_j的libhello是静态库,静态加载到了main_j中。

main_d+libhello.a(代码部分,不包含其他数据)  约等于 main_j;

使用不同编译的可执行程序。

首先我们要了解进程的可执行程序的

程序加载到内存形成进程时也会将动态库一同加载到内存中,在代码执行的过程中遇到库的接口,是就会跳转到共享区中区调用动态库。实现动态调用。

程序加载到内存形成进程时也会将动态库一同加载到内存中,但是静态库的代码是直接拷贝到可执行程序中,并不会加载到内存中,在运行静态库代码时只会在自己的内存块中运行程序,但运行到i静态库接口的时候依旧会跳到共享区,然后再去访问动态库。

完全静态链接的可执行程序所有的代码数据都再自己进程的物理内存中,不依赖任何库,所以不会打开任何库。


推荐使用动态链接

多个进程可以同时依赖一个的动态库,这样该动态库加载到了内存后可以供多个库使用。

当多个进程同时使用动态库,就可大大节约物理内存。动态库:进程=1:n。

如果是静态库就是把库的代码拷贝到进程中,多个静态链接的进程一起加载到内存中,库代码的重复性大大浪费了内存空间  静态库:进程=1:1

动态链接具有以下优缺点:

优点:

  • 更加节省内存并减少页面交换;
  • 库文件与程序文件独立,只要输出接口不变,更换库文件不会对程序文件造成任何影响,因而极大地提高了可维护性和可扩展性;
  • 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个库函数;
  • 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

缺点:

  • 运行时依赖,否则找不到库文件就会运行失败
  • 运行加载速度相较静态库慢一些
  • 需要对库版本之间的兼容性做出更多处理

动态库的优缺点就是静态库的返向优缺点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java:Mybatis-Plus自动填充功能配置和使用

Mybatis-Plus可以实现字段自动填充功能 文档 https://baomidou.com/pages/4c6bcf/ 目录 需求数据库设置默认值通过代码的方式进行自动填充配置自动填充设置方式一设置方式二 测试依赖pom.xml 需求 我们需要自动填充的字段: 插入数据时自动填充:creat…

view的常用属性和方法介绍(arcgis for javascript)

ArcGIS for JavaScript中的视图(view)是一个地图实例类,用于管理地图的显示区域、符号和标注等。通过视图类,可以实现以下功能: 显示地图:将地图显示在Web页面上。 缩放:缩放视图到指定的级别。…

Benewake(北醒) 快速实现TF40与电脑通信操作说明

目录 一、前言二、工具准备1. TTL-USB 转接线2. TF403. 兆信直流电源4. 连接线5. PC:Windows 系统6. 上位机 WINCC_TF 三、 连接方式1. TTL-USB 转接线接口说明2. TF40 引脚功能及连接说明3. 连线图 四、TF40 与电脑通信操作说明1. 参数设置2.获取测距值3. 设置波特…

百度倾力出品|《神经网络机器翻译技术及产业应用》正式上线

随着经济社会的国际交流合作日益密切,人们迫切需要高质量、高效率的跨语言信息获取和传播工具。《神经网络机器翻译技术及产业应用》以产业需求为牵引,分析了新时期机器翻译的产业需求特点和挑战,介绍了神经网络翻译的基本理论、前沿技术以及…

10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】

10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】 前言说明推荐10课程设计收尾及优秀作品展示答辩安排 目录一、单周期CPU的设计过程1、基本的20条指令固定指令格式设计I 型指令设计J型指令设计lw sw指令设计 2、扩展的20条指令J型扩展指令设计乘法除法指令格式 3、实现…

阿里云推出工作学习 AI 助手“通义听悟”;谷歌发布 PaLM2;吴恩达推出了三门课

🦉 AI新闻 🚀 阿里云推出工作学习 AI 助手“通义听悟” 摘要:阿里云峰会・粤港澳大湾区上,阿里云宣布推出最新产品“通义听悟”,该产品能用于会议讨论、教学培训、调研访谈、视频观看等场景,依托大模型&a…

CDS Core Data Services S4 CDS view--1

下一代的数据库视图。比DDIC view能干。 也就是S4上了之后就用这个CDS view了。 目录 1. 软件安装 2. CDS view 是啥 3. 怎么去建CDS view 4. 如何修改一个CDS view,添加association关联 5. 一些有用的功能 6. 基础语法 6.1 Case 6.2 Cast 6.3 String 6…

【程序】基于matlab使用线性 FM 脉冲波形拉伸处理进行距离估计

一、前言 此示例展示了如何在使用线性 FM 脉冲波形的雷达系统中使用拉伸处理来估计目标的范围。 二、介绍 线性FM波形是现代雷达系统中的热门选择,因为它可以通过扫描宽带宽来实现高范围分辨率。然而,当带宽达到数百兆赫甚至千兆赫兹时,在数字…

【C进阶】文件操作(下)(详解--适合初学者入门)

目录 补充的知识点:> 标准流 FILE型 fopen(打开文件) fclose(关闭文件) 5.文件的随机读写💻 5.1 fwrite📂 5.2fread📂 5.3fseek📂 5.4 ftell📂 5.5 rewind📂 6.文本文件和二进制文件💻 7.文件…

如何做好网站建设定制开发

随着互联网的发展,如今的网站建设技术越来越先进,所以在网站建设定制开发中就出现了很多的模版,如:企业类型、产品信息、品牌介绍等。当然网站建设定制开发不是说只要模版就行了,对于网站建设而言,模版只是…

【送书福利-第八期】《硅基物语.AI大爆炸: ChatGPT→AIGC→GPT-X→AGI进化→魔法时代→人类未来》

大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 本文目录 一、前言二、内容介绍三、作者介…

如何进行网站建设定制开发

如今,由于互联网的迅速发展,市场竞争越来越激烈,企业想要在市场中保持竞争力,就必须要有自己的品牌形象。而网站建设则是品牌建设的重要组成部分,一个好的网站能够有效提升企业品牌形象,提高客户满意度和忠…

Linux LNMP(Linux NGINX MySQL PHP)

NGINX处理静态页面性能出色,但是动态页面几乎没有处理能力,比Apache还差 所以涉及动态页面的场合一般由PHP Python Java(后缀php,py,jsp)等处理 静态页面请求 客户端 -> nginx动态页面请求 …

【工具推荐】使用D3.js制作网页版网络拓扑图,可拖转可跳转链接

文章目录 一、有哪些工具可以生成带链接的网络拓扑图二、推荐使用D3.js三、写个 demo吧四、d3.js相关学习资料1.官方网站2.D3.js 教程3.D3.js 教程 一、有哪些工具可以生成带链接的网络拓扑图 有一些 JavaScript 库可以帮助你创建网络拓扑图,并且支持将每个节点作为…

chatgpt赋能python:Python函数相加:如何使用函数进行数学计算

Python函数相加:如何使用函数进行数学计算 在Python编程中,函数是一种非常有用的工具,可以将代码组织成可重复使用的块。函数可以接受输入并产生输出,也可以执行任何数量的操作。在本文中,我们将介绍如何使用Python函…

美创科技新一代 灾备一体化平台(DRCC v3.0)发布

随着数字化转型浪潮的迅速推进,关键基础设施的运行安全和业务连续性保证成为数字化建设的基石。 云计算时代带来的资产复杂性和灾备技术多态性,给灾备能力建设、灾备资源高效利用和日常灾备运营提出了新挑战。灾备建设如何“简单又弹性”、灾备运营如何“…

Cloudflare 的 Kafka 故事:在处理 1 万亿条消息的过程中吸取的经验教训

关键要点 Cloudflare在处理大量数据时使用Kafka集群,开发了一个通用的消息总线集群,以解耦团队、有效扩展和处理数万亿条消息。 为了解决事件驱动系统中无结构通信的问题,应建立一个强有力的契约:跨平台数据格式Protobuf帮助Cl…

【教程】路由器自动定时登录校园网

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 前景提要 Python脚本 Shell脚本(推荐) 路由器挂机 实现效果 前景提要 小米路由R4A千兆版安装breedOpenWRT教程以及救砖(全脚本无需硬改)【教程】保姆级红米AX6000刷UBoot和OpenW…

【Shiro】使用org.crazycake依赖的ShiroConfig

前言 整个Shiro专题中,这个部分是最早需要开始看的,主要先了解ShiroConfig都有哪些东西;由于这个项目使用的redis依赖是org.crazycake的shiro-redis,与我后面所用的不同,所以该部分只是简单的梳理了一下。 PS&#xf…

Hadoop高可用集群

HA高可用集群 HA介绍 什么是HA HA: High Availability,高可用集群,指的是集群7*24小时不间断服务。 为什么需要HA 在HDFS中,有NameNode、DataNode和SecondaryNameNode角色的分布,客户端所有的操作都是要与NameNode交互的&#xff…