动态链接库、静态库、import库区别

动态链接库(Dynamic Linked Library):
Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中。其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数;

User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。

静态库(Static Library):
函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块

组合起来创建最终的可执行文件(.EXE文件)。

导入库(Import Library):
在使用动态链接库的时候,往往提供两个文件:一个引入库和一个DLL。引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需

要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。

在运行Windows程序时,它通过一个被称作“动态链接”的进程与Windows相接。一个Windows的.EXE文件拥有它使用不同动态链接库的引用,所使用的函数即在那里。当Windows程

序被加载到内存中时,程序中的调用被指向DLL函数的入口,如果DLL不在内存中,系统就将其加载到内存中。

当链接Windows程序以产生一个可执行文件时,你必须链接由编程环境提供的专门的“导入库(import library)库”。这些导入库包含了动态链接库名称和所有Windows函数调用的

引用信息。链接程序使用该信息在.EXE文件中构造一个表,当加载程序时,Windows使用它将调用转换为Windows函数。

静态库与导入库的区别:
导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了

地址符号表等,确保程序找到对应函数的一些基本地址信息。

静态链接与动态链接:

静态链接方法:#pragma comment(lib, "test.lib") ,静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来
静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库

动态链接方法:LoadLibrary()/GetProcessAddress()和FreeLibrary(),使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态链接的程序。

在软件开发的过程中,大家经常会或多或少的使用别人编写的或者系统提供的动态库或静态库,但是究竟是使用静态库还是动态库呢?他们的适用条件是什么呢?

简单的说,静态库和应用程序编译在一起,在任何情况下都能运行,而动态库是动态链接,顾名思义就是在应用程序启动的时候才会链接,所以,当用户的系统上没有该动态库时,应用程序就会运行失败。再看它们的特点:

动态库:

1.共享:多个应用程序可以使用同一个动态库,启动多个应用程序的时候,只需要将动态库加载到内存一次即可;

2.开发模块好:要求设计者对功能划分的比较好。

静态库:代码的装载速度快,执行速度也比较快,因为编译时它只会把你需要的那部分链接进去,应用程序相对比较大。但是如果多个应用程序使用的话,会被装载多次,浪费内存。

总上,我个人认为,如果你的系统上有多个应用程序都使用该库的话,就把它编译成动态库,这样虽然刚启动的时候加载比较慢,但是多任务的时候会比较节省内存;如果你的系统上只有一到两个应用使用该库,并且使用的API比较少的话,就编译成静态库吧,一般的静态库还可以进行裁剪编译,这样应用程序可能会比较大,但是启动的速度会大大提高。

动态链接库和静态库的区别相关推荐

  1. 动态链接库、静态库区别与VS2005项目相关设置

    出处:http://blog.csdn.net/Ocean2006/archive/2010/02/05/5289908.aspx 一.动态链接库.静态库区别 二.VS2005项目相关设置 三.#pr ...

  2. 头文件和库文件区别,动态库和静态库的区别,动静态库的生成

    文章目录 一.什么是头文件?什么是库文件?有什么区别? 先说总结 目标文件 二.什么是静态库?什么是动态库?有什么区别? 三.为什么只用在程序头部写上包含的头文件,头文件中并没有实现内容就可以使用声明 ...

  3. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  4. 如何区分一个FrameWork是动态链接库还是静态库

    参考链接:http://www.cnblogs.com/Jenaral/p/5530383.html 关于静态库和动态库的区别..a .dylib .tbd .framework有什么区别? 首先为什 ...

  5. 为什么要动态链接,动态链接库和静态连接的区别与优势

    本文摘抄于程序员的自我修养-链接装载与库7.1节,这段写的很好,直接拿过来来收藏 http://www.wq3028.top/technology/compile/20180727124/ 静态链接使 ...

  6. Linux系统中动态库和静态库的区别

    Linux系统中"动态库"和"静态库"那点事儿 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源 ...

  7. C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别

    C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1  LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add F ...

  8. 关于静态库、动态库的区别汇总

    real framework中不可以使用类别 或 不可以不包含类文件 real framework 中直接调用NSClassFromString函数会返回null  需要强制加载指定类 或 直接通过类 ...

  9. 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)

    因之前初学接触这个概念的时候无法直观的理解,询问多人也得到类似如下回复:静态库就是静态库,动态库就是动态库.一个编译一个不编译等类似的回复.伪善的人太多,披着"有问题可以问我"的外 ...

最新文章

  1. 《新一代城市大脑建设与发展》专家研讨会在京举办
  2. DEV GridLookUpEdit属性设置
  3. 学习笔记-----关于C++中类的成员函数可以访问私有成员的问题
  4. 安卓学习 之 多媒体技术(八)
  5. 国内各地图API坐标系统比较与转换
  6. 苹果明年有望推出15英寸版MacBook Air
  7. 一个男人具备什么样的条件,才能结婚?
  8. 网络协议从入门到底层原理(7)网络安全 - 常见攻击、单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书
  9. 中考计算机考试exce,中考信息技术EXCEL操作.doc
  10. Oracle中查看所有的表,用户表,列名,主键,外键
  11. C语言 三角函数用法
  12. 音乐NFT平台的新浪潮,看mozik如何引领数字音乐时代革命
  13. 服务器改无线路由器怎么设置,怎么把旧路由器改装成中继器
  14. 泛泰A870 Recovery KitKat 合集
  15. v36.05 鸿蒙内核源码分析(工作模式) | 程序界的韦小宝是谁 | 百篇博客分析HarmonyOS源码
  16. python羊车门问题
  17. Python编程初学者指南——有所思
  18. 访问者模式(Visitor模式)
  19. Spring Cloud Contract 初识之一 :简介
  20. ▲ Android自定义方框EditText注册验证码

热门文章

  1. 时空快照模型snapshots
  2. 库存系统难破题?京东到家来分享
  3. Load Balance Tomcat with Nginx and Store Sessions in Redis--reference
  4. tomcat server容器解读
  5. jms在jboss上的简单应用
  6. 专访平安科技首席科学家肖京:平安智能化的甜蜜与辛酸
  7. 谈无人车安卓为时尚早,投自动驾驶有三个标准
  8. 无法安装计算机的启动配置,“windows 无法更新计算机的启动配置。安装无法继续”这样解决...
  9. 布道微服务_08服务治理的常用手段
  10. Spring Cloud【Finchley】-08使用Hystrix实现容错