静态链接与动态链接

C语言 | 什么是动态链接与静态链接? 什么是链接? 对于初学C语言的朋友,可能对链接这个概念有点陌生,这里简单介绍一下。我们的C代码编译生成可执行程序会经过如下过程: 链接就是把目标文件与一些库文件生成可执行文件的一个过程。关于更详细的编译过程,可查阅往期笔记:C语言的编译过程 静态、动态链接? 1、什么是静态链接? 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由... 阅读详情

代码由源代码(.c)到可执行文件(.exe)的转换过程

代码由源代码(.c)到可执行文件(.exe)的转化过程,有以下几步:

  1. 预处理器在预处理阶段将源代码(.c) 转为预处理文件(.i)
  2. 编译器在编译阶段将预处理文件(.i) 转为汇编文件(.s)
  3. 汇编器在汇编阶段将汇编文件(.s) 转为目标文件(.o)
  4. 链接器在链接阶段将目标文件(.o) 转为可执行程序(.exe)

在这里插入图片描述

动态链接与静态链接

静态链接

静态链接:链接器在链接阶段将各种库文件和相关文件集成到可执行文件中,在windows下静态链接库以.lib结尾,linux下以.a结尾

静态链接的优点:
1)装载速度很快,运行速度比动态链接快;
2)只需要开发人员在开发机上有完整的.lib文件,不需要在用户机器上有完整的.lib文件,自完备

静态链接的缺点:
1)可执行文件很大,并且相同代码很多,资源浪费

动态链接

动态链接:动态链接是把链接过程在运行时进行,动态链接在可执行文件装载或运行的时候,由操作系统的装载程序加载库文件,windows下以.dll结尾,也有.lib的,但是这个是叫做导入库,和静态链接的不一样,linux下以.so结尾

动态链接的优点:
1)可执行文件很小;
2)适合大规模软件开发,开发过程耦合度小、独立,便于不同开发人员和开发组织开发;
3)不同编程语言按照约定可以使用同一套.dll库;
4)dll文件与exe文件独立,如果输出接口相同,更换dll文件不会对exe文件产生影响,可拓展性和可维护性好

动态链接的缺点:
1)速度没有静态链接快;
2)不具有自完备,如果用户机器中没有.dll文件,程序将无法运行并且报错

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优 本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。 阅读详情

相关推荐

Vc出现不能连接到一个或多个 vCenter server 系统:http://vcenter-vx.utibet.edu.cn:443/sdk

问题描述: 解决办法: esxi6.7的bug 第一种通过升级系统来解决问题 第二种是通过删除数据来解决 第一步:进入到esxi的shell 第二步查看其中的服务开启状态 第二步 df -h 第三步 /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres 第四步 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oi

m0_49328536的博客 9895

【计算机基础】静态链接与动态链接

本文介绍了静态链接和动态链接。

weixin_44211968的博客 1万+

微信小程序测试号开发后上传按钮灰色?三步快速切换正式AppID

本文详细解析了微信小程序测试号开发后上传按钮灰色的原因,并提供了三步快速切换正式AppID的解决方案。通过注册正式小程序账号、修改项目配置和重新编译上传,开发者可以轻松解决上传按钮不可用的问题,确保小程序顺利上线。

weixin_29291185的博客 1560

动态链接与静态链接

文章目录前言一、代码由源代码(.c)到可执行文件(.exe)的转化过程二、动态链接与静态链接1.静态链接2.动态链接总结 前言 注:我的笔记风格,可能不会特别官方,不会晦涩难懂,而是以一个初学者能看懂的方式把知识呈现出来,用最简单的语言把抽象的概念表达出来~ 动态链接与静态链接是链接器在链接阶段的两种方式,链接器是什么?链接阶段又是什么? 请往下看~ 一、代码由源代码(.c)到可执行文件(.exe)的转化过程 代码由源代码(.c)到可执行文件(.exe)的转化过程,有以下几步: 预处理器在预处理阶

qq_46046431的博客 1677

使用Tansformer分割三维腹部多器官--UNETR实战

不会 transformer 没关系,本教程开箱即用。Tina姐总算对transformer下手了,之前觉得难,因为刚开始学序列模型的时候就没学会。然后就一直排斥学transformer。这两周没什么事,加上MONAI有现成的教程,就打算先跑通后,再学理论。然后,顺利的跑通了代码,再学了一周理论,发现它也不过如此嘛,入门还是很容易的。有同学想了解的transformer的话,可以先看完这个实战教程,如果感兴趣,后续会出一个transformer入门路线。利用纯Transformers作为编码器来学习输入量的

Tina姐的博客 1万+

基于Arduino与光电传感器的心率监测系统:从原理到实现的完整指南

光电式心率监测是一种基于光电容积脉搏波描记法(PPG)的非侵入式生命体征测量技术。其核心原理是利用特定波长光线照射皮肤组织,通过检测因血液容积周期性变化导致的反射光强微弱波动,来获取心率信息。这项技术的关键价值在于实现了低成本、便携化的连续生理参数监测,广泛应用于健康管理、运动科学及嵌入式系统教学领域。在工程实践中,信号处理算法(如移动平均滤波与动态阈值峰值检测)对提升测量精度至关重要。本文以Arduino平台为例,详细解析了如何集成MAX30102或Pulse Sensor Amped等光电传感器,结合T

weixin_33461476的博客 240

深入浅出静态链接和动态链接

        作为一名C/C++程序员,对于编译链接的过程要了然于胸。首先大概介绍一下,编译分为3步,首先对源文件进行预处理,这个过程主要是处理一些#号定义的命令或语句(如宏、#include、预编译指令#ifdef等),生成*.i文件;然后进行编译,这个过程主要是进行词法分析、语法分析和语义分析等,生成*.s的汇编文件;最后进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可...

kang___xi的博客 9万+

ETAS工具导入DBC生成Com协议栈

ETAS工具导入DBC主要也是生成arxml用的,ETAS推荐使用Cobra导入,本文介绍导入过程及注意事项不管是导入DBC还是arxml,本质上都是为了生成对应的com协议栈,目的是为了减少重复的工作量,所以,前期定义好收发的矩阵很重要,一般导入一次之后,后面就可以按变更点手动更改了。

赞的博客 1696

静态链接与动态链接(详解)

静态链接与动态链接(详解)

wkshwbw的博客 2571

Codev与Zemax相互转化

Codev与Zemax相互转化

weixin_72050316的博客 1032

C#串口通信从入门到精通(11)——串口接收的数据存储到本地文件(txt、csv)

本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!

qq_34059233的博客 7230

静态链接和动态链接

大家都知道,一段程序的编译全过程,也就是程序运行的四个阶段,分为,不清楚的可以看我之前写的文章,。我在这里简单讲一下链接的概念,参考黑皮书《深入理解计算机系统》(csapp),现在有一个简单的hello程序,这个程序经过之后生成可重定位目标文件(hello.o),也是一个二进制文件,,假如hello程序调用了printf函数,它是每个C编译器都提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.0程序中。

Happy learning and coding journey! 5544

Python爬虫实战:爬取并分析电子商务平台用户评论数据

爬虫(Web Scraping)是指通过编写程序模拟浏览器行为,从网站中提取数据的过程。爬虫技术可以自动化地抓取网站上的信息,广泛应用于数据收集、价格监控、市场研究等多个领域。情感分析(Sentiment Analysis)是一种自然语言处理技术,用于确定文本的情感倾向。对于电子商务平台的评论数据,情感分析可以帮助商家了解消费者的反馈情绪,例如产品的好评、差评或中性评价。本文详细介绍了如何使用Python爬虫技术从电子商务平台抓取并分析用户评论数据。我们展示了如何通过requestsSelenium。

2201_76125261的博客 1171

静态链接库与动态链接库详解

以下内容源于C语言中文网相关内容的学习整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 9301

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

动态链接和静态链接

对于c和c++程序员,对于编译链接的过程要了然于胸,编译过程:预编译、编译、汇编、链接。动态链接和静态链接属于其链接部分的方式。 编译分为三步 1. 首先对源文件进行预处理。(如宏、#include、预编译指令#ifdef等) 生成.i文件,这个过程也叫做预编译(Processing) 2.然后进行编译,这个过程主要是进行词法分析、语法分析和语义分析等,生成.s的汇编文件; 3.最后进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可重定位的二进制目标文件。生成.o文件 现代..

Bobowen的博客 2321

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

静态链接和动态链接区别

1.静态链接与动链接的区别 在C语言中,我们知道要生成可执行文件,必须经历两个阶段,即编译、链接。 在编译过程中,只有编译,不会涉及到链接。 在链接过程中,静态链接和动态链接就出现了区别。静态链接的过程就已经把要链接的内容已经链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;而动态链接这个过程却没有把内容链接...

请叫我皮皮虾的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

静态链接与动态链接的区别

对于初学C语言的朋友,可能对链接这个概念有点陌生,这里简单介绍一下。我们的C代码编译生成可执行程序会经过如下过程:链接就是把目标文件与一些库文件生成可执行文件的一个过程。关于更详细的编译过程,可查阅上一篇笔记:C程序的编译过程1、什么是静态链接?静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。这里的库指的是静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。2、什么是动态链接

weixin_39911617的博客 1788

动态链接和静态链接区别

你是否知道引用的那些头文件中的函数是怎么被执行的呢?这就要牵扯到链接库了!!!   库有两种,一种是静态链接库,一种是动态链接库,不管是哪一种库,要使用它们,都要在程序中包含相应的include头文件。我们先来回顾一下程序编译的过程。如下图: 静态链接: 静态连接库就是把 (lib) ⽂件中⽤到的函数代码直接链接进⽬标程序,程序运⾏的时候不再需要其它的库⽂件; 静态链接的优缺点: 静态链接的缺点很明显,一是浪费空间,因为每个可执行程序中对所有需要的目...

居老师的博客 2045

动态库静态库动态链接与静态链接详解

这里以Windows程序开发作为参考来讲解: 首先DLL大家应该都知道,动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),不知道的网上搜一下,稍微开发过Windows程序的小白都应该比较清楚,具体的概念不是本文的重点。 动态链接 是指一个项目A链接了一个动态链接库的项目B(项目B编译后生成的是DLL以及lib文件)。项目A...

Think88666的博客 1万+

动态链接与静态链接的优缺点

静态链接的优点* 1、程序的启动速度和运行速度相对于动态链接快。 静态链接的缺点 1、内存的磁盘空间的浪费 当多个进程静态链接同一个静态库时,会复制多个副本,每个程序链接静态库的时候都会链接一个副本到目标文件里,链接的进程越多,副本也就越多,在磁盘上占用的空间就会变大,程序运行的时候,也会占用内。 2、模块更新麻烦 一个大型项目都会有很多个独立的功能模块,项目发布出去后,后期的维护中,有一个功能模块需要修改bug,而模块又是静态模块,需要整个项目程序进行重新编译后,再发布给客户升级,升级文件的容量非常大,客

weixin_40732273的博客 5234

gcc 静态链接与动态链接

将下面的代码保存为 test_linking.c 的文件。 #include <stdio.h> int main(int argc, char* argv[]) { printf("hello world\n"); return 0; } 1. 进行动态链接 gcc 编译的默认方式就是使用动态链接,这里我们直接编译即可。 longyu@longyu-pc:~/The_Prog...

龙瑜的博客 2566
上一篇: 手眼标定总结
下一篇: 傅里叶叠层成像基础——正向成像模型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值