动态链接库-原理

原创 2004年09月15日 08:54:00

理解库<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

库是一个文件, 它包含函数或者其它可以在应用程序中使用的资源.

这些资源一般是通用性的, 允许许多工作不同的应用程序能轻易的共享同呈代码或者资源.

 

静态链接库

是应用程序可执行文件的一部分, 不能与其它使用相同函数的其它应用程序共享.

通常用于相对小的稳定一些的函数库,比如说C标准库,因为它容易创建和维护.

它是在编译和链接时加到可执行文件中的.

 

动态链接库

是可执行文件,它包含函数,数据或资源等其他应用程序可用到的东西.

它可以在需要的时候随时装入, 在装入时或运行时.

当某应用程序需要一个已装入的DLL:

1.       把该DLL映射到新进程的地址空间.

2.       WINDOWS 2000 DLL所留的引用计数器加1.

注意: DLL的路径是它身分的一部分.

 

DLL的利弊

好处: 减少可执行代码大小,重用代码,大工程可分为易管理的小工程,实现新功能更容易

缺点: 处理多个文件,增加工程的复杂性,用户要处理DLL的版本问题

 

初始化DLL

入口点函数被调用的时机:

进程第一次调用该DLL

DLL相联的进程创建新进程时

DLL相联的进程的某个线程摧毁时

进程释放DLL

 

导入与导出DLL函数与数据

所有的函数,数据和资源都必须显示地从DLL中导出:

在库的.DEF文件的EXPORT部分中,填写导出项目的名称

使用工具相关的方法,VC中的__declspec(dllexport)关键字

DEF: 16WINDOWS开发中比较重要,32位下不那么重要

对于32DLL,它至少包含LIBRARY EXPORTS两项

导出DEF文件中的符号:

              如用户希望使用DEFEXPORT部分:

可以把DLL作为C工和编译以关闭name mangling

或通过MAP中的信息填写EXPORTS

 

在装入期间装入DLL

隐式装入: 开始执行EXE,WINOWS2000 负责找到应用程序所需要的DLL,

并对每一次DLL调用负责地址解析.

链接时需要导入库

 

运行时装入DLL

LoadLibrary(), GetProcAddress(), FreeLibrary()

 

DLL版本控制

 

创建DLL共享内存

使用DEF中的SECTIONS关键字,用户可以把DLL使用的内存区定义为共享的.

把共享内存置于区中(通过编译指示),并初始化

 

使用MFCDLL

动态链接常规DLL

DLLMFC DLL动态链接

静态链接常规DLL

DLLMFC DLL静态链接

扩展DLL(最常用)

DLL扩展了MFC

 

DLL动态链接库的工作原理

转载地址:http://blog.csdn.net/woshinia/article/details/7919281#comments "动态链接"这几字指明了DLLs是如何工作的。对于常规的函...
  • zzuchengming
  • zzuchengming
  • 2016年10月03日 20:19
  • 1782

动态链接原理分析

linux 下动态链接实现原理 符号重定位 讲动态链接之前,得先说说符号重定位。 c/c++ 程序的编译是以文件为单位进行的,因此每个 c/cpp 文件也叫作一个编译单元(translation u...
  • shenhuxi_yu
  • shenhuxi_yu
  • 2017年05月08日 23:20
  • 604

动态链接库(SO)加载原理

1、动态链接库的加载流程 首先从宏观流程上来看,对于 load 过程我们分为 find&load,首先是要找到 so 所在的位置,然后才是 load 加载进内存,同时对于 dalvik 和 art 虚...
  • q1183345443
  • q1183345443
  • 2016年11月21日 14:52
  • 2885

请简述你对动态链接库(DLL)的理解。

dll
  • tony2278
  • tony2278
  • 2016年08月10日 09:06
  • 575

什么是动态链接库

什么是dll: dll只是一组源代码的模块,每个模块包含一些可供应用程序或者其他dll调用的函数,在应用程序调用一个dll里面的函数的时候,操作系统会将dll的文件映像映射到进程的地址空间中,这...
  • u011392772
  • u011392772
  • 2016年09月10日 10:21
  • 278

静态链接库与动态链接库----C/C++

静态链接库和动态链接库
  • freestyle4568
  • freestyle4568
  • 2015年11月13日 17:18
  • 7772

在VS2010中创建和调用动态链接库和静态链接库

vs2010创建和调用动态链接库和静态链接库
  • yangghuannn
  • yangghuannn
  • 2016年01月13日 09:59
  • 5488

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

一、        静态链接库与动态链接库区别 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使...
  • u011404663
  • u011404663
  • 2016年02月25日 18:19
  • 1852

编译动态链接库.so和静态链接库.a

名词介绍 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数...
  • lylwo317
  • lylwo317
  • 2016年05月02日 12:35
  • 1930

Windows 动态链接库 DLL 浅析

一、概念 DLL:Dynamic Link Library,即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。 它是microsoft在windows操作系统中实现共享函数库概念的一种实现方...
  • heyabo
  • heyabo
  • 2013年03月26日 17:51
  • 27611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态链接库-原理
举报原因:
原因补充:

(最多只允许输入30个字)