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

windows上的静态链接和动态链接的区别与作用(笔记)

C源代码文件经过预编译、编译和汇编后输出的目标文件的后缀和操作系统是有关系的。不同的操作系统使用不同的命名约定和文件格式来表示目标文件。常见的目标文件后缀包括:

- Windows系统:.obj、.lib、.dll
- Linux系统:.o、.a、.so
- macOS系统:.o、.a、.dylib

因此,根据不同的操作系统,编译器会根据约定为目标文件添加相应的后缀

在Windows平台上,编译器通常会生成.obj和.lib两种类型的文件。

.obj文件是编译器生成的目标文件,包含了编译后的机器代码和相关信息。

而.lib文件是库文件,包含了编译后的目标代码和符号表等信息。它可以是静态库(Static Library)或导入库(Import Library)的形式。静态库是将目标代码直接链接到可执行文件中,而导入库则是包含了对动态链接库(.dll文件)的引用。

在编译过程中,编译器会将源代码编译成.obj文件,然后链接器会将多个.obj文件合并成可执行文件或生成相应的.lib文件。

总结起来,C源代码文件经过预编译、编译和汇编后,会生成.obj文件作为目标文件,同时也可能生成.lib文件作为库文件。

在链接过程中,这些.obj文件会被链接器处理,最终生成可执行文件(.exe文件或者在Linux版本上支持的ELF格式文件)。

静态链接的作用:

静态链接是将目标文件和库文件的代码和数据合并到一个可执行文件中的过程。静态链接的作用有以下几个方面:

1. 减少运行时依赖:静态链接将程序所需的所有代码和数据都包含在可执行文件中,不需要依赖外部的库文件。这样可以减少程序在运行时对外部库的依赖,简化部署和分发过程。

2. 提高执行速度:静态链接可以将库文件的代码和数据与程序代码一起编译成一个可执行文件,减少了函数调用和跳转的开销。这样可以提高程序的执行效率,减少运行时的开销。

3. 避免库版本冲突:当程序依赖的库文件存在多个版本时,静态链接可以确保程序使用的是指定版本的库文件,避免了不同版本之间的冲突。

4. 简化程序的发布和部署:静态链接生成的可执行文件可以独立运行,不需要在目标系统上安装相应的库文件。这样可以简化程序的发布和部署过程,减少了对目标系统的依赖性。

尽管静态链接有以上的优点,但也存在一些缺点。静态链接会增加可执行文件的大小,导致占用更多的磁盘空间。同时,如果库文件发生更新或修复了bug,需要重新编译整个程序才能应用更新。
 

动态链接的作用:

动态链接是在程序运行时将目标文件和库文件的代码和数据加载到内存中的过程。动态链接的作用有以下几个方面:

1. 减少内存占用:动态链接使得多个程序可以共享同一个库文件的代码和数据,避免了重复加载和占用内存的情况。这样可以减少程序的内存占用,提高系统的资源利用率。

2. 简化程序的更新和维护:动态链接使得库文件的更新可以独立于程序的更新。当库文件发生更新或修复了bug时,只需要替换库文件即可,而不需要重新编译和发布整个程序。这样简化了程序的更新和维护过程。

3. 提高程序的启动速度:动态链接使得程序在启动时只需要加载必要的代码和数据,而不需要加载整个库文件。这样可以减少启动时间,提高程序的响应速度。

4. 解决库版本冲突:动态链接器可以根据程序的需要,自动加载和链接适当版本的库文件。这样可以解决不同程序对同一库文件不同版本的依赖冲突问题。

5. 提供共享库的灵活性:动态链接使得库文件可以被多个程序共享使用,提供了更好的代码复用和模块化的方式。这样可以减少代码的冗余,提高开发效率。

需要注意的是,动态链接需要依赖系统中已经安装的库文件,如果目标系统上缺少相应的库文件,程序将无法正常运行。因此,在部署程序时需要确保目标系统上已经安装了所需的库文件。

相关文章:

windows上的静态链接和动态链接的区别与作用(笔记)

C源代码文件经过预编译、编译和汇编后输出的目标文件的后缀和操作系统是有关系的。不同的操作系统使用不同的命名约定和文件格式来表示目标文件。常见的目标文件后缀包括: - Windows系统:.obj、.lib、.dll - Linux系统:.o、.a、.so - macOS系…...

MySQL和Postgresql数据库备份和恢复

MySQL和Postgresql数据库备份和恢复 一、MySQL数据库备份 备份单个数据库 $ mysqldump -uroot -p bdname > dbname.sql备份多个数据库 $ mysqldump -uroot -p --databases dbname1 dbname2 ... > dbname.sql # 备份所有数据库 $ mysqldump -uroot -p --all-databases…...

使用MCU上的I2C总线进行传感器应用

使用MCU上的I2C总线进行传感器应用是嵌入式系统开发中常见的任务,本文将介绍在MCU上实现I2C总线传感器应用的相关技术和流程。 首先,I2C(Inter-Integrated Circuit)总线是一种常用的串行通信协议,用于连接多个设备&am…...

汽车标定技术(七)--基于模型开发如何生成完整的A2L文件(2)

目录 1. 自定义ASAP2文件 2. asap2userlib.tlc需要修改的部分 3. 标定量观测量地址替换 3.1 由elf文件替换 3.2 由map文件替换 3.3 正则表达式(含asap2post.m修改方法) 4.小结 书接上文汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)-C…...

ZZ308 物联网应用与服务赛题第E套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (E卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的…...

web相关框架

web相关框架 web 后端开发框架 expressKoaHapiNest web 前端UI库(组件库) Naive-UiAnt Design VueElement plus 后端页面,前端框架(一个开箱即用前端框架) naive-ui-admingin-vue-adminvue-vben-adminvue-pure-adminvue3-antd-admin 无…...

安装dubbo-admin报错node版本和test错误

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :dubbo-admin安装 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台&#xff0…...

HTML使用canvas绘制海报(网络图片)

生成前&#xff1a; 生成后&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>媒体参会嘉宾邀请函生成链接</title><link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/vant2.10…...

20道高频JavaScript面试题快问快答

※其他的快问快答&#xff0c;看这里&#xff01; 10道高频Qiankun微前端面试题快问快答 10道高频webpack面试题快问快答 20道高频CSS面试题快问快答 20道高频JavaScript面试题快问快答 30道高频Vue面试题快问快答 面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过…...

【STM32】HAL库UART含校验位的串口通信配置BUG避坑

【STM32】HAL库UART含校验位的串口通信配置BUG避坑 文章目录 UART协议校验位HAL库配置含校验位的串口配置BUG避坑附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总线函…...

Python实用技巧:将 Excel转为PDF

将Excel文件转换为PDF可以方便储存表格数据&#xff0c;此外在打印或共享文档时也能确保表格样式布局等在不同设备和操作系统上保持一致。今天给大家分享一个使用第三方Python库Spire.XLS for Python 实现Excel转PDF的简单方法。 实现步骤 首先&#xff0c;通过pip命令来安装依…...

【面经】讲一下你对jvm和jmm的了解

JVM JVM是Java虚拟机&#xff0c;是Java程序的执行环境。它是一种虚拟的计算机&#xff0c;通过在实际的计算机上仿真模拟各种计算机功能来实现. JVM是Java程序运行的核心&#xff0c;可以将Java字节码转换为可执行的机器码&#xff0c;提供了跨平台性、优秀的垃圾回收器&…...

《网络协议》03. 传输层(TCP UDP)

title: 《网络协议》03. 传输层&#xff08;TCP & UDP&#xff09; date: 2022-09-04 22:37:11 updated: 2023-11-08 15:58:52 categories: 学习记录&#xff1a;网络协议 excerpt: 传输层、UDP、TCP&#xff08;可靠传输&#xff0c;流量控制&#xff0c;拥塞控制&#xf…...

ZooKeeper调优

服务器硬件配置 建议 Zookeeper 的服务器最好专属(或是资源隔离的)。磁盘由于 Zookeeper 的数据写入磁盘,强烈建议要使用 SSD。 Linux操作系统优化 Zookeeper 的性能会很明显受到交换分区的影响。建议部署 Zookeeper 的服务器关闭交换分区功能或是通过内核参数调整,减少…...

改进YOLOv5:结合ICCV2023|动态蛇形卷积,构建不规则目标识别网络

🔥🔥🔥 提升多尺度、不规则目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: �…...

开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器

包管理器 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序npm 全局变量pnpmPnpm介绍ViteYarn ‘vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 yarn yarn add vue-amap yarn add vue-amap ant-design-vue npm 全局变量 换主机 新…...

Mac上好用的翻译软件推荐 兼容m

Mac翻译软件可以用在学习&#xff0c;工作&#xff0c;生活当中&#xff0c;一款好用的翻译软件&#xff0c;具有翻译准确&#xff0c;翻译快速等基本特点&#xff0c;能够帮您提高工作效率。Mac上有什么好用的翻译软件呢&#xff1f;今天小编为大家整理了6款好用的Mac翻译软件…...

软件下载网站

1.qt 下载官网 Index of /new_archive/qt 2.qt-vs 插件下载 Index of /official_releases/vsaddin...

java获取近期视频流关键帧与截图

1、背景 最近在做视频转发的开发时&#xff0c;遇到一个问题&#xff0c;前端订阅播放h264视频流时&#xff0c;有时会出现一段时间黑屏&#xff0c;经过测试发现是没有收到关键帧&#xff0c;只有第一帧是关键帧才能保证后续播放正常。所以后端需要实现一个功能&#xff0c;就…...

arcgis 批量删除Table中的某些Field

当shp或者table文件较少时&#xff0c;可以手动删除每个文件中的某些字段&#xff0c;当文件较多时&#xff0c;就需要使用arcpy或者model进行处理。...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...