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

Dify Rerank 模型配置全流程解析:从报错定位到代码实现 阅读详情

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。静态链接库与静态链接库调用规则总体比较如下。

对于静态链接库(比较简单):

首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。

 

生成库的.h头文件中的声明格式如下:

extern "C" 函数返回类型 函数名(参数表);

在调用程序的.cpp源代码文件中如下:

#include "..\lib.h"

#pragma comment(lib,"..\\debug\\libTest.lib")

//指定与静态库一起链接

 

第二,因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!:)

对于动态链接库:

动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。

首先我们必须先注意到DLL内的函数分为两种:

(1)DLL 导出函数,可供应用程序调用;

(2)DLL 内部函数,只能在 DLL 程序使用,应用程序无法调用它们。

因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。

因此这里衍生出两个问题:

第一:如何调用?即调用的方式

第二:不同调用方式对应的库的生成过程和调用规则

我逐步展开问题。

第一,存在两种调用方式——动态调用和静态调用

第二,两种调用方式的库的生成过程和调用规则

1〉动态调用

 

生成库的.h头文件中的声明格式如下:

extern "C" 函数返回类型__declspec(dllexport) 函数名(参数表);

在调用程序的.cpp源代码文件中按如下流程调用:

在main函数代码的开始处

定义需要的DLL模块的句柄和此DLL模块模块中需要调用的函数的函数指针。

定义好后紧接着就是标准的三部曲:

取得需要的DLL模块------>返回模块句柄

LoadLibrary("DLL模块路径")

取得需要的函数地址———>返回函数指针GetProcAddress(模块句柄,"函数名")

从内存中卸载DLL模块———>FreeLibrary(模块句柄)

2>静态调用

在调用程序的.cpp源代码文件中按如下流程调用:

#include.........

告诉编译器与 DLL 相对应的.lib 文件所在的路径及文件名

#pragma comment(lib,"路径和文件名")

extern "C" 函数返回类型_declspec(dllimport) 函数名(参数表)分号

int main()

{

..............

}

PMOS缓启动电路设计实战:用LTspice优化上电时序,把60A冲击降到15A 本文通过一个实战案例,深入解析了PMOS缓启动电路如何有效抑制上电冲击电流。文章指出,低ESR电容是导致冲击电流飙升的元凶,并详细阐述了利用LTspice仿真工具,通过优化栅极电阻和栅源电容等参数,将高达60A的冲击电流成功降至15A的设计与优化过程,为电源开关电路设计提供了可复用的方法论。 阅读详情

相关推荐

ros2 humble中使用realsense t265与d435

前提,安装realsense SDK 2.51.1版本并且能成功启动realsense-viewer V2.51.1想要在ros2中使用realsense t265,必须配合realsense SDK v2.51.1使用realsense-ros 4.51.1版本,因为新版本realsense ros2不再对t265支持下面记录源码编译安装 realsense-ros 4.51.1版本。

m0_72797388的博客 956

【基础】动态链接库/静态链接库的区别

C或C++程序从源文件到生成可执行文件需经历4个阶段分别为预处理、编译、汇编和链接。链接阶段所要完成的工作,是将同一项目中各源文件生成的目标文件和程序中用到的库文件整合为一个可执行文件。虽然库文件明确用于,但编译器提供了2种实现链接的方式,分别称为静态链接和动态链接。采用静态链接方式实现链接操作,的库文件称为静态链接库;采用动态链接方式实现链接操作,的库文件称为动态链接库。在Linux发行版系统中,静态链接库文件的后缀名通,动态链接库的后缀名通;,动态链接库的后缀名。...

weixin_41838721的博客 8123

100多台物理GPU服务器,每台服务器上有8张GPU卡,组网

计算网用 IB/RoCEv2 保证低延迟高带宽,支撑 800+GPU 的分布式训练;管理网和存储网独立部署,避免干扰核心通信;全链路冗余和规范布线,确保集群稳定运行;搭配 Slurm/K8s 和监控工具,实现高效管理。该方案可支撑千亿参数大模型训练,且具备极强的扩展性,未来可平滑扩容至 200 + 台服务器。

weixin_42795092的博客 2022

静态链接库和动态链接库

简单对比介绍静态链接库和动态链接库,以及二者的创建和使用方法。

紫荆书香的专栏 972

告别NEDC!手把手教你将CLTC/WLTP等最新工况文件导入AVL Cruise(附资源包)

本文详细指导如何将CLTC、WLTP等最新工况文件导入AVL Cruise软件,替代传统的NEDC工况。从资源获取、文件预处理到分步导入指南,再到常见问题排查,帮助工程师高效完成汽车仿真性能评估。附赠全球主流工况文件资源包,助力精准仿真分析。

weixin_30374009的博客 461

GCC调试黑科技:-fomit-frame-pointer优化下如何保证栈回溯能力

本文深入探讨了GCC编译器在启用`-fomit-frame-pointer`优化选项时如何保证栈回溯能力。通过分析`.eh_frame`段的结构与DWARF调试信息,提供了从编译选项配置到实战调试的完整解决方案,帮助开发者在性能优化与调试能力之间找到最佳平衡点。

u6v7w8x的博客 906

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

目录 1、链接库概述 2、静态链接库 2.1、编辑测试文件 2.2、将.c 编译生成 .o文件 2.3、由 .o 文件创建.a静态库 2.4、在程序中使用静态库 2.5、生成目标程序main,然后运行 3、动态库(隐式链接) 3.1、由 .o创建.so动态库 3.2、隐式方式使用动态库 3.3、动态库的初始化和解析 1、动态库的构造和析构函数机制 2、全局变量初始化 4.........

weixin_36670529的博客 4372

Arduino四足开源机器猫-Opencat(导航贴)

本内容由我和小伙伴共同编写,未经授权,谢绝转载! 1.项目介绍 2.组装调试教程 (一)Opencat-F (1)资料地址(包含程序代码&&3D打印图纸): 链接:https://pan.baidu.com/s/1AcVA5jSiOSzRKqEQAomrTA 提取码:szfx (2) (二)Opencat-B (1)组装调试 (2)组装调试注意事项 (3)添加新技能 3.编程 ...

qqliuzhitong的博客 4173

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

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。   静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生

爱篮球的IT小青年~ ~ 803

【MODIS处理工具】MRT(MODIS Reprojection Tool) 下载及安装

【MODIS处理工具】MRT(MODIS Reprojection Tool) 下载及安装

WW、forever的博客 2407

基于Simulink的永磁同步电机容错控制(缺相容错)

本文基于Simulink平台,详细介绍了永磁同步电机(PMSM)缺相容错控制的仿真实现方法。针对逆变器开路故障导致的缺相问题,提出"检测-重构-补偿"三阶段控制策略:采用电流阈值法快速检测故障(<5ms),重构αβ坐标系实现两相矢量控制,并通过谐波电流注入抑制转矩脉动(<8%)。仿真结果表明,该方法能有效维持故障后电机运行,转速波动<3%,满足电动汽车等关键应用的可靠性需求。文章包含完整的Simulink建模步骤、MATLAB函数代码及参数设置,为工程实践提供了可复现的

xiaoheshang_123的博客 147

【C++】中动态链接库和静态链接库的区别

动态链接适用于那些希望减少最终二进制文件大小、允许独立更新库代码或需要在多个程序间共享库代码的情况。静态链接则更适合于那些需要确保二进制文件独立运行、不依赖于外部文件或需要更严格控制版本的应用场景。选择哪种方式主要取决于项目的具体需求、目标平台以及开发团队的偏好。

wangnaisheng的专栏 1753

字节最新开源模型 DA3(Depth Anything 3)使用教程(一)从任意视角恢复视觉空间

本文介绍DepthAnything3(DA3)模型,一种能够从任意视觉输入中预测几何结构的创新解决方案。DA3采用Transformer骨干网络,通过统一的深度光线表示简化学习过程,支持单目/多视角深度估计、姿态估计和3D高斯预测等多项任务。模型系列包含基础版、度量级和单目专用版本,其中嵌套版本DA3NESTED-GIANT-LARGE表现最佳。代码库提供交互界面、CLI工具和多格式导出功能,支持模块化扩展。实验表明DA3在各项任务上超越现有模型,所有训练数据均来自公开学术数据集。

2506_90492529的博客 2549

动态链接库和静态链接库的原理及区别

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件。动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EX

爱橙子的OK绷的专栏 4589

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux下静态链接库与动态链接库的区别

通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件 (object file)与牵涉到的函数库(library)被链接合成一个可执行文件 (executable file)。程序 在运行 时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件 名为“libxxx.a”的形式。 其实,我们也可以把对一些库函数的链接载入推迟到程序运行的时期(runtime)。这就是如雷贯耳的动态链接库(dy

RICH_BABA的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

一、        静态链接库与动态链接库区别 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包

OnWay的专栏 3720

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

经典面试题 动态链接库与静态链接库的区别

静态和动态的区别就是在链接时如何处理库函数,也就是如此导致的执行效率与使用方式的区别。

猫轻王的博客 1849

静态链接库与动态链接库的相同点与区别

静态链接库与动态链接库的相同点:1、共享代码;2、代码封装;静态链接库与动态链接库的区别:1、静态链接库被包含在宿主程序中,而动态链接库则是在需要时动态地装载和卸载DLL文件;2、静态链接库中不能再包含其它动态或者静态链接库,而动态链接库中则可再包含。在VC中动态链接库如下分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular

施昌权专栏 1153

静态链接库、动态链接库与COM组件的区别

静态链接库、动态链接库与COM组件的区别 1.动态链接库与静态链接库的区别。  1.1 静态链接库作为代码的一部分,在编译时被链接。     1.2 动态链接库有两种使用方式:       一种是静态加载,即在应用程序启动时被加载;       一种是动态加载,即是该动态链接库在被使用时才被应用程序加载。 2.动态链接库和COM组件的区别      2.1 动态链接库的表现形式只

rongwenbin的专栏 2382
上一篇: STL 整理1(map、set、vector、list、stack、queue、deque、priority_queue)
下一篇: C++内部数据类型和非内部数据类型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值