动态链接库和静态链接库的区别
两种库:
一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。
一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。
(所以无论是动态链接库还是静态链接库,都会有lib文件)
两种链接方式:
动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL中函数的可执行代码所需的信息。
静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。
静态链接库的使用:
- 需要的文件: 头文件 .h 、静态库 .lib
- 头文件.h中有函数的声明,使用静态链接库的项目需要引用该文件才能编译通过
- .lib包含了实际执行代码、符号表等等
- 加载lib的方法: 法1.使用编译链接参数或者VS的配置属性来设置 法2.使用pragma编译语句,例如pragma comment(lib,"a.lib")
- .lib中的指令将全部被直接包含在最终生成的 EXE 文件中
动态链接库的使用:
一、动态库的隐示调用:
- 需要的文件: 头文件 .h 、动态链接库的.lib文件,动态链接库的dll文件
- 头文件.h和静态链接库使用时的作用一样,使用动态链接库中的函数的项目需要引用该文件才能编译通过
- .lib包含了函数所在的DLL文件和文件中函数位置的信息,.dll包含了实际执行代码、符号表等等
- 加载lib的方法:lib是编译链接是用的,跟使用静态链接库时一样有两种方法:法1.使用编译链接参数或者VS的配置属性来设置 法2.使用pragma编译语句,例如pragma comment(lib,"a.lib")
- 加载dll的方法:dll是运行时用的,链接了lib之后形成的EXE可执行文件中已经有了dll的信息,所以只要把dll放在和exe同一个目录下就可以了,运行时根据EXE需要自动加载dll中的函数
二、动态库的显式调用:
- 需要的文件: 动态链接库的dll文件
- 不需要.h头文件和.lib文件,因为LoadLibrary之后可以使用getProcAddress来查找一个函数的地址从而调用该函数 (显式调用的前提是使用者需要知道想调用的函数的名字、参数、返回值信息,也就是说虽然编译链接用不上.h头文件,但是调用者编程时可能还是要看.h文件作参考来知道函数名字、参数、返回值信息)
显式调用动态库步骤:
1、创建一个函数指针,其指针数据类型要与调用的 DLL 引出函数相吻合。
2、通过 Win32 API 函数LoadLibrary()显式的调用DLL,此函数返回 DLL 的实例句柄。
3、通过 Win32 API 函数GetProcAddress()获取要调用的DLL 的函数地 址,把结果赋给自定义函数的指针类型。
4、使用函数指针来调用 DLL 函数。
5、最后调用完成后,通过 Win32 API 函数FreeLibrary()释放DLL 函数。
最后,特别说明下载使用C#显式调用dll时会更加简单,如下:
[DLLImport(“DLL文件”)]
修饰符 extern 返回变量类型 方法名称 (参数列表)
描述如下:
DLL文件:包含定义外部方法的库文件。
修饰符: 访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。
返回变量类型:在DLL文件中你需调用方法的返回变量类型。
方法名称:在DLL文件中你需调用方法的名称。
参数列表:在DLL文件中你需调用方法的列表。
动态链接库和静态链接库的区别相关推荐
- 动态链接库与静态链接库的区别
动态链接库与静态链接库的区别 库文件的概念 库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量.函数或类.库文件分为静态库和动态库,静态库和动态库的区别体现在程序的链接阶段:静态库在程序的链接 ...
- 区别动态链接库和静态链接库
动态链接库和静态链接库: 首先理解两种生成可执行程序的链接方式: 动态链接: 链接动态库,只是在生成的程序中记录库中的函数信息表,并没有将具体代码实现写入程序中,所以依靠动态链接生成的程序在运行时,需 ...
- Windows下动态链接库和静态链接库的生成以及调用
Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...
- 动态链接库与静态链接库
动态链接库与静态链接库 首先纠正所谓"静态连接就是把需要的库函数放进你的exe之中"的说法.在真实世界中,有三个概念:Use static libary, static ...
- c++动态链接库及静态链接库的生成与使用
c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...
- linux 生成和使用动态链接库和静态链接库的Makefile编写
引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...
- windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...
动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...
- 关于动态链接库和静态链接库
关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...
- BCG 动态链接库和静态链接库
4.1 动态链接库和静态链接库 使用BCG界面库的应用程序,发布时可以以动态库或静态库的方式链接. BCG已经在BCGCBProInc.h文件中定义好了链接选项,我们只需要修改工程MFC的工程配置即可 ...
最新文章
- 基于Spark ML 聚类分析实战的KMeans
- python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)
- apache camel 相关配置_小白在 linux 系统部署apache、mysql、Laravel 环境学习笔记!
- 邮件服务器fixpost服务(1)
- linux 下Python调用C模块
- 合并DateFrame之—— append()
- python echarts mysql python_Django中从mysql数据库中获取数据传到echarts方式
- 呵,你会51单片机的精确延时吗?
- 【BZOJ - 3436】小K的农场(差分约束)
- Salt 系统初始化
- 一种快速构造和获取URL查询参数的方法:URLSearchParams
- 深度学习2.0-44.对抗生成网络-GAN
- c语言编写面向对象的类
- MGWR多尺度地理加权回归
- Mybatis Plus分页Page total始终为0
- 读史笔记(I) 日光之下
- Autoware Docker安装和仿真
- 逍遥模拟器安卓7.1 xposed安装
- 紫光信息港 软件测试,紫光展锐 信息化软件工程师面经
- selenium必应搜索,获取标题以及url
热门文章
- linux mdadm命令详解
- 笔记整理--Linux守护进程
- 218本巴菲特、芒格及段永平推荐书籍下载 (2012-03-31 22:53:28)
- 中缀表达式转后缀表达式两位数_什么是圆形磁动势?永磁无刷电机是怎么转起来的?...
- 某程序员哀叹:做码农真的很悲哀,有的35岁就没人要了
- 2022-2028年全球与中国饲料核苷酸行业市场需求预测分析
- 负载均衡技术应用介绍
- ES6代码转ES5教程(babel安装使用教程)
- pdf文件转换ppt可编辑_创建,转换和编辑PDF文件的免费工具
- Origin2018怎么画出向上向下的柱状图