C++知识点14:静态链接库和动态链接库区别

静态链接与动态链接 C/C++中的静态链接与动态链接详解。 阅读详情
AI摘要

本文详细阐述了静态库和动态库的概念、特点及应用场景。静态库在编译时链接并复制到可执行文件中,适合独立性强的应用;动态库在运行时加载,有利于资源节约与软件更新。

库:函数的集合
作用:共享代码

静态、动态指链接
程序编译过程中,在链接阶段,程序生成的汇编文件和库进行链接,生成可执行文件。
这里写图片描述

(底层格式,内存布局)

1.静态库

(.a .lib)

静态链接库在程序编译时被连接到目标代码中参与编译;链接时将库完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝;生成可执行程序之后,静态链接库不需要(因已将函数拷贝到可执行文件中)。

静态库特点:
1.静态库对函数库的链接是放在编译时期完成的
2.程序在运行时与函数库再无瓜葛,移植方便。
3.浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件
4.如果静态库进行更新则应用该库的所有程序都需要重新编译(全量更新)。

2.动态库

(.so .dll)
程序运行时由系统动态加载动态库到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

动态库特点:
1.动态库把对一些库函数的链接载入推迟到程序运行时期。
2.可以实现进程之间的资源共享。(因此动态库也称为共享库)
3.将一些程序升级变得简单。
4.甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)

区别:
1.时期:
静态库在编译时连接,在链接时拷贝
动态库在运行时连接
2.资源
静态库在每次使用时将全部连接进可执行程序,浪费资源。
动态库在使用时访问动态库中函数,节省资源。
3.更新升级
静态库更新,则每个使用该静态库的程序都需要更新,不易于更新升级
动态库仅更新自身,易于更新升级
4.包含其他库
静态链接库不能再包含其他动态链接库
动态链接库可以包含其他动态链接库

Windows C++动态链接库(DLL)开发实战:从创建到调用全流程详解 动态链接库(DLL)是Windows平台实现模块化、代码复用和运行时灵活加载的核心技术。其原理在于将函数和资源封装为独立的二进制模块,程序运行时由操作系统动态加载,从而实现内存共享、模块独立更新和多语言互操作。这项技术的核心价值在于提升软件的可维护性和可扩展性,尤其适用于大型软件的插件系统、核心算法封装和第三方SDK分发。在实际工程中,开发者需要掌握导出符号声明、调用约定选择、隐式与显式链接等关键技术点,并妥善处理运行时依赖和内存管理等常见问题。本文以Visual Studio环境为例,通过一个完整的数学库 阅读详情

相关推荐

掌握Visual C++运行库:VC9、VC11与VC14的安装与配置

动态链接库(Dynamic Link Libraries,简称DLLs)是微软Windows操作系统中一种实现共享函数库的重要方式。在应用程序运行过程中,DLLs可以在运行时被动态加载,从而实现代码的共享和模块化。通过使用DLLs,开发者可以将程序分割成多个较小的模块,这不仅有助于减少程序的体积,还可以通过更新特定的DLLs而不必重新编译整个应用程序来修复错误或添加新功能。DLLs中通常包含了一系列的函数、类或者资源,例如Windows系统的GDI、GDI+等。

weixin_36296444的博客 2645

静态链接和动态链接区别

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

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

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 583

静态链接和动态链接

由于每个静态链接的程序都包含了一份完整的库代码,多个程序使用相同库时,会重复加载相同的库代码,导致系统内存的浪费。:由于所有代码在编译时就已经链接好,所以程序启动时不需要进行动态链接的加载过程,这使得静态链接程序的启动速度较快。:因为程序本身并不包含库代码,只有库的引用信息,所以动态链接生成的可执行文件通常比静态链接的文件要小。:静态链接后的程序包含了所有必要的库文件,能够在没有安装特定库的系统上运行,因此具有较好的可移植性。:静态链接在运行时不需要进行额外的库加载,执行时的性能通常也会比动态链接略好。

weixin_73931631的博客 1556

STM8开发环境搭建(STVD + COSMIC)

一、STM8开发IDE 1. STVD + COSMIC ST Visual Develop (STVD)只支持汇编开发,C语言开发需要再安装COSMIC,配套起来使用。 2. IAR IAR也可以用来开发STM8 下面介绍STVD + COSMIC的搭建方式 二、环境搭建 1. STVD下载、安装 直接从官网下载:https://www.st.com/en/development-tools/stvd-stm8.html 安装很简单,基本下一步往下点。 2. COSMIC下载、安装 对于stm8可以使用3

a183635870的博客 1万+

Linux 命令行的艺术

Linux 命令行的艺术前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统更多资源免责声明熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练...

AI天才研究院 9277

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

链接

weixin_45925735的博客 1453

用 SAP Fiori Launchpad Content Manager 做目录传输:把 Catalog 变更稳稳送到目标系统

摘要:SAP Fiori项目中,目录传输是确保应用一致交付的关键环节。开发团队常遇到目录在不同系统/客户端间不一致的问题,核心在于理解Launchpad内容管理的两种作用域:系统级(/UI2/FLPCM_CONF)使用workbench请求跨系统传输,客户端级(/UI2/FLPCM_CUST)通过customizing请求按SCC4设置传输。混淆作用域会导致目录分叉,如系统级目录被客户端本地修改后形成独立副本。官方推荐使用Content Manager而非过时的Launchpad Designer,并强调手

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 102

动态链接 & 静态链接(区别及优缺点)

1.静态链接与动态链接的区别 在C语言中,我们知道要生成可执行文件,要经历预编译、编译、汇编、链接,在链接过程中,静态链接和动态链接就出现了区别。静态链接的过程就已经把要链接的内容已经链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;而动态链接这个过程却没有把内容链接进去,而是在执行的过程中,再去找要链接的内容,生成的可执行文件中并没有要链接的内容,所以当你删除动态库时,可执行程序就不能运行。动态链接生成的可执行文件要比静态链接生成的文件要小一些。 2.动态库与静态库的区别 就

shengnan89的博客 4297

TC3XX - MCAL知识点(三十七):AURIX™ TC3xx 的BootLoader烧录APP完成之后跳转使多个核均正常运行

摘要:针对AURIX TC3xx多核芯片在软件复位后仅Core0能启动的问题,分析发现该芯片在Cold Power-on Reset(断电复位)时会完整执行多核启动流程,而Application Reset(软件复位)会跳过从核初始化。解决方案包括:1)在BootLoader中显式调用IfxCpu_startCore()函数启动其他核;2)通过跳转函数强制各核从指定地址启动;3)双Boot场景下让每个核独立响应复位命令。实测表明,软件复位后需手动触发从核启动,或采用断电复位方式确保所有核正常初始化。

梦想技术家 407

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3599

静态链接库和动态链接库区别

转载:C++知识点14:静态链接库和动态链接库区别_htt789的博客-优快云博客_c++静态链接和动态链接 重点: 1.动态库和静态库的区别在于链接时候的方式不同。 2.静态库链接方式:在程序编译时被连接到目标代码中参与编译,链接时将库完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝; 3.动态库链接方式:程序运行时由系统动态加载动态库到内存,供程序调用,系统只加载一次,多个程序共用,节省内存 ...

qq_38409301的博客 2141

SAPIEN ManiSkill3 入门教程(一)

请注意,table.set_pose(pose) 设置的是演员在世界帧中的坐标系姿势。移除的实体可以再次添加到场景中,但已在场景中的实体则不能再次添加。显示器可以是物理的(如显示器),也可以是虚拟的(如 VNC)。我们可以通过 get_pose()、get_linear_velocity() 和 get_angular_velocity()获取演员的运动量(姿势、线速度、角速度)。现在,让我们创建一个斜坡。例如,您可能需要一个简单的碰撞形状来进行快速模拟,但却需要一个复杂的视觉形状来进行逼真的渲染。

机器人控制与仿真应用 3070

静态链接库.a文件 动态链接库.so文件 定义

显然一个是静态链接库(.a),一个是动态链接库(.so) 联系和区别 相同点:链接库本身不是最终的执行程序文件,而是为其他执行文件提供服务的程序。如果把最终的执行程序文件比作一个汽车生产厂家,那么链接库就可以理解为零部件提供商 。 不同点:静态链接库在链接阶段就直接打包到最终的执行程序文件中,而动态链接库则是在程序运行时去链接库里面找需要的东西。 优缺点:显然,静态链接的库文件会导致最终目标程序文件体积膨胀,优点是编译之后就不受原来静态库文件的影响,即使原来的静态库被删除了都没关系; 而动态链接库

nynkl的博客 946

LVGL core theme主题管理(lv_theme.c)

如果打开宏,主题的初始化是在显示设备注册时完成的。整个themes的实现放在目录下面。这里一共有三套主题(basic、default和mono)可供选择或者参考。源码中默认对接的是 default 主题,所以在中,看到的是调用default主题的接口。也就是说,如果需要更换主题,把这里面的接口换掉就可以了。或者要重新做一套主题,参考这些实现修改也就可以了。虽说有三套主题,但逻辑流程是一样的。主要完成两个工作:构造lv_theme_t结构体和初始化默认样多备用(style_init函数内实现)。构造。....

Bigan(安)的博客 3410

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

CMake下头文件和链接库的使用

一、头文件与链接库文件的区别 头文件:申明函数接口 库文件:存放函数的定义 库文件通过头文件向外导出接口,用户通过头文件找到库文件中需要的函数实现代码进行链接至程序当中。 二、静态链接库(lib)与动态链接库(dll)的区别 静态链接库将文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要该库文件。动态链接库将被调用的函数所在的文件模块(dll)和调用函数在文件中的位置等信息链接进目标...

weixin_38988633的博客 6775

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

孙鑫VC++第19章动态链接库

第19章、动态链接库(DLL)   1.      动态链接库通常都不能直接运行,也不能接受消息,他们是一些独立的文件,是函数;   2.      Windows API中所有的函数都包含在DLL中;其中有3个最重要的DLL:   1.      Kernel32.dll:包含那些用于内存管理、进程和线程的函数; 2.      User32.dll:  执行用户界面任务的函数(窗

C__Monkey的专栏 2178

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用

利用Visual Studio编写C++工程文件时,时常需要自行配置自己编写的头文件、外部引用的静态链接库和动态链接库的路径,这时候需要在项目属性中进行配置。

啊枫 8935

Linux 动态链接库(shared object)的基础知识

动态链接库的就基础知识 库有两种:动态和静态;动态是以.so 为后缀,静态是以.a为后缀;比如:libhello.o  libhello.a 静态库是在写代码时调用的库函数,代码中调用库函数,在编译时会从库函数中copy 整个库函数到可执行文件;所以一旦连接成功(编译成功);可执行文件中就包含了 整个库函数的代码,以后在执行这个静态文件时就不用这个静态库函数了。 动态库函数:在li

shuming的专栏 5004

C/C++动态链接库二三事

最近有点纠结于动态链接库,以前也经常用.但很多地方只是仿照着别人的用,深入一点就不知道了,可能这就是知其然不知其所以然吧.起因源自"dlfcn.h",很多没用过linux的朋友可能会文这个头文件是来干什么的??实际windows下也有类似的东西,而且我纠结的东西在windows也

MichaelSrc的草稿簿 1826

php动态链接库,C 编撰动态链接库PHP DLL

C 编写动态链接库PHP DLL新建-》工程-》win32 Dynamic Link Library->一个简单的dll工程只有在函数前标注:extern? ?"C"? ?_declspec(dllexport)的函数才能被其他的程序通过dll的方式调用extern "C" _declspec(dllexport) int add(int i1,int i2){return i1+i2;}(...

weixin_39880490的博客 235

动态链接库

动态链接库 动态链接库顾名思义就是编译的时候不被编译进.exe可执行文件,而是在程序运行的时候动态加载.dll里面的可执行代码。 动态链接库的创建跟静态链接库的创建类似:如图所示 1.新建,项目,Visual C++项目,Win32 Console Application. 2.点击完成创建dll类库项目 对于动态链接库里面的方法有两种情况:(这是跟静态类库不一样的地方)

我的专栏 1210

C++:LIB和DLL的区别与使用

http://www.cppblog.com/biao/archive/2013/03/14/198416.html 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static l...

wddpfx的博客 639

C++动态链接库开发实战:从DLL设计到加载失败排查

在C++工程实践中,随着模块规模增长,静态库逐渐暴露出编译耦合、更新困难等问题,动态链接库(DLL)成为大型项目的必然选择。其核心原理是运行时加载与符号解析,将代码与依赖分离,从而实现模块独立更新、节省内存并支持跨语言调用。在实际开发中,开发者需要关注32/64位匹配、运行时库一致性、C风格接口设计等关键决策,并区分隐式链接与显式加载的适用场景。DLL加载失败是Windows客户端开发高频痛点,例如0x7E、0x7F等错误码常与依赖缺失、位数不符或版本冲突相关,掌握dumpbin、Dependencies等

weixin_28717969的博客 250

动态链接库编程范例

我们经常在做各种二次开发的时候都会使用卖方提供的SDK进行开发,往往卖方并不愿理提供给我源程序而是给我一个提供 一系列函数接口说明和一些封装的动态链接库。 今天我们就要说说静态链接库和动态链接库,静态链接库往往以lib后缀结尾,然而动态链接库往往以dll后缀结束。但是我 们不能仅仅以后缀名作为它们二者的区别,比如动态链接库也可能存在lib后缀的文件,然而这种情况下lib文件只是保存一 ...

weixin_34258838的博客 186

美的c++研发岗面经---2020秋招

美的c++研发岗面经---2020秋招,希望对您有用

weixin_44378800的博客 2663
上一篇: linux指令:
下一篇: 测试问题
有多少个小土豆
博客等级 码龄10年 235粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值