Windows与Linux动态链接库技术研究

来源 :硅谷 | 被引量 : 0次 | 上传用户:initialD2004
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  [摘要]动态链接库技术是实现和设计程序常用的技术。分析和比较Windows和Linax两种操作系统动态技术,为对动态链接库技术的学习提供有益的借鉴。
  [关键词]动态链接库共享对象技术程序移植
  中图分类号:TP3 文献标识码:A 文章编号:1 671—7597(2009)1010092—01
  
  一、引言
  
  动态链(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术,其目的是缩减程序,节省空间,提高效率。采用动态库技术具有很高的灵活性,对于升级软件版本更加容易,可以带来如运行时占用较少的硬件资源,有助于模块式化体系结构开发,修改升级软件方便,隐藏实现细节等方便。
  在Windows和Linux操作系统中,都可以采用这种方式进行软件设计,但它们的调用方式以及编程方式不尽相同。本文将在介绍分析Windows系统及Linux系统下的动态链接技术的基础上对两种操作系统的处理方式进行了简要的比较。
  
  二、Windows动态库技术
  
  Windows本身就有三个基本的动态链接库,是windows的主要组成部分,它们分别是KERNEL(负责内存管理、任务调度),USER(管理用户界面),GDI(图形设备接口)。另外,Windows系统中以FUN、DRV或DLL为扩展名的文件都是动态链按库的例子。
  Windows的动态链接机制是动态链接库的上述优势得以实现的基础。一旦windows应用程序调用了DLL中的函数,那么在生成相应的Windows可执行文件时,所调用的函数的代码并没有被链接程序拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序和相应的DLL之间建立连接关系。当要执行所调用的DLL中的函数时,根据链接时产生的重定位信息,Windows转去执行DLL中相应的函数代码。这样就不难理解,DLL具有自己的代码段和数据段。一个DLL在内存中只有一个实例,多个应用程序使用同一个DLL时,将共享内存中的一个实例。另外,在Windows管理下,动态链接库的实例拥有并维护自己的一个引用计数,这个引用计数表明当前和该库进行动态链接的任务的个数。当需要装入一个DLL,而内存中已经存在时,则仅使引用计数加1,而且保证使应用程序中对同一个DLL函数的调用都是内存中的相同的副本。当一个应用程序结束时,相应的DLL引用计数减1。仅当引用计数值为0时,Windows这才把相应的DLL卸出内存。可见DLL能够经济高效地使用内存。
  
  三、Unux共事对象技术
  
  在Linux操作系统中,采用了很多共享对象技术(Shared Object),虽然它和windows里的动态库相对应,但它并不称为动态库。相应的共享对象文件以,so作为后级,为了方便,在本文中,对该概念不进行专门区分。Linux系统的/lib以及标准图形界面的/usr/XllR6/lib等目录里面,就有许多以so结尾的共享对象。同样,在Linux下也有静态函数库这种调用方式,相应的后缀以,结束。Linux采用该共享对象技术以方便程序间共享,节省程序占有空间,增加程序的可扩展性和灵活性。Linux还可以通过LDPRELOAD变量让开发人员可以使用自己的程序库中的模块来替换系统模块。
  同Windows系统一样,在Linux中创建和使用动态库是比较容易的事情,在编译函数库源程序时加上shared选取即可,这样所生成的执行程序就是动态链接库。通常这样的程序以so为后缀,在Linux动态库程序设计过程中,通常流程是编写用户的接口文件,通常是,h文件,编写实际的函数文件,以,c或,opp为后缀,再编写makefile文件。对于较小的动态库程序则不必如此,但这样设计会使程序更加合理。
  编译生成动态链接库后,进而可以在程序中进行调用。在Linux中,可以采用多种调用方式同Windows的系统目录(..\system32等)一样可以将动态库文件拷贝到/lib目录或者在/1ib目录里面建立符号连接,以便所有用户使用。
  
  四、两种系统动态库比较分析
  
  Windows和Linux采用动态链接库技术的目的是基本一致的,但由于操作系统不同,他们之间也还是有许多不同之处,主要体现在以下几个方面:
  1,动态库程序编写。在windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数作为初始化的入口。通常在导出函数的声明时需要有declspec(dllexport)关键字Linux下的gco编译的执行文件默认是ELF格式,不需要初始化入口,亦不需要在函数中做特别的声明,编写比较方便。
  2,动态库编译。在Windows系统下面,有方便的调试编译环境,通常不用自己去编写makefile文件,但在linux target=Linux下面需要自己动手编写makefile文件,因此,必须掌握一定的makefile编写技巧,通常Linux编译规则相对严格些。
  3,动态库调用方面。Windows和Linux对其下编制的动态库都可以采用显式调用或隐式调用,但具体的调用方式不尽相同。
  4,动态库输出函数查看。在windows中,有许多工具和软件可用来查看DLL中输出的函数例如命令行方式dumpbin以及vc++工具中的DEPENDS程序。在Linux系统中通常采用n来查看输出函数,也可以使用ldd查看程序隐式链接的共享对象文件。
  5,对操作系统的依赖。这两种动态库运行依赖于各自的操作系统,不能跨平台使用。因此,对于实现相同功能的动态库,必须为两种不同的操作系统提供不同的动态库版本。
  
  五、总结
  
  本文系统分析了Windows和Linux动态库实现,从程序编写、编译、调用以及对操作系统依赖等方面综合分析和比较了这两种调用方式的不同之处,为初学者对这两种动态链接技术的学习提供了有益的参考。
其他文献
一、引言    电机广泛应用于机床,洗衣机、干燥机、计算机光驱、打印机、潜艇、卫星等领域,其中作为永磁体的磁瓦是重要组成部分。电机在转动过程中产生的振动对磁瓦工作的安全性有很大的影响。所以对磁瓦进行动力学研究是十分必要的。通过FEA分析软件ANSYS进行模态分析,得到系统的固有频率和振型,为改进电机的性能提供数据支持。
期刊
[摘要]通过对s0A和虚拟化的概念、特点、应用等入手,提出虚拟化与SOA的融合方案,并最终通过EsB的例子具体描述虚拟化在SOA中的应用。  [关键词]SOA 虚拟化 SOA与虚拟化的融合    一、SOA面述    SOA(service—Oriented Architecture,面向服务的体系结构)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系
期刊
[摘要]建立起我国较为完善的公共信用体系,进而规范并促进社会经济活动,是一项社会、经济意义深远且关系到管理体制创新、政府职能转变、法制建设规范等方面规模浩大的系统工程。公共信用信息的保护虽然是一个法律问题,但是客体是公共信用信息系统保护的技术层次内容。分析公共信用信息系统存在的安全威胁,并提出保护公共信用信息系统安全的具体策略和措施。  [关键词]信用信息 系统 安全 保护  中图分类号:G31 
期刊
[摘要]智能决策支持系统作为人工智能的一个重要研究领域,允许决策者和信息经营者、资源配置者和管理者、策略规划者和装备控制者改进他们的工作效率,已经成为学术界关注的焦点,其发展前景备受世人瞩目。在总结国内外对于智能决策支持系统研究的基础上-提出一种新的关于决策支持系统的模型架构,并对其实现与发展前景做规划和展望。  [关键词]人工智能 专家系统 决策支持 模型设计  中图分类号;TP2 文献标识码:
期刊
随着网络经济的发展,企业日益扩张,一种新的基于MPLS的VPN的互联方式成为现在的主流。MPLS VPN虚拟专网业务非常适合于实现企业跨区域内部互连和企业间互连的需求。但由于当前国内MPLS YPN的技术能力还不是非常成熟,升级、调测试或者其他原因造成的网络中断造成了MPLS VPN自身可用性的隐患,而很多能够使用这异地互联的企业对业务的连续性要求很高,一旦网络发生拥塞甚至中断就会对企业带来巨大损
期刊
[摘要]目前以计算机技术为核心的辅助教学已得到广泛使用,但学校计算机公共服务平台几乎都是以胖客户机模式存在,由此带来各种使用和管理上的问题。对此提出,将以“云”为支撑的云计算和云存储应用于计算机公共服务平台中,来解决以往必须安装过多软件,存储重复数据或存储不便等问题。  [关键词]云 云计算 云存储 计算机公共服务平台  中图分类号:TP3 文献标识码:A 文章编号:1671—7597(2009)
期刊
一、引言    随着互联网的迅猛发展,每天由网络产生的数据量越来越庞大。单机面对这些浩繁的数据,常常陷入“力不从心”的尴尬境地。而Hadoop是一个高效的,可靠的和可扩展的开源分布式计算平台,它对海量数据的处理能做到“游刃有余”。
期刊
[摘要]计算机病毒常让人们谈虎色变,实际上是不必要的,因为计算机病毒是可以通过在我们对计算机病毒的正确认识和积极防范中得到较好的避免的。  [关键词]计算机病毒 正确认识 流疫 防范  中图分类号:TP3 文献标识码:A 文章编号:1 671—7597(2009)1010101—01    随着信息时代的来临,计算机的使用在人们的日常生活中越来越普及,计算机的应用是科技进步的象征,是具有跨时代意义
期刊
[摘要]内存作为数字证据的重要来源,研究还处于起步阶段。在各操作系统下的内存取证工作首要解决的问题是定位内核对象的位置,才能根据查找到的对象进一步分析,获得用户打开的文件列表、建立的网络连接等。针对这一问题,提出内存中查找对象的方法。  [关键词]电子证据计算机犯罪 计算机取证分析 物理内存取证
期刊
在当前的互联网生活中,广大网民已经越来越离不开一位助手——搜索引擎。通过它,我们就仿佛有了一本百科全书,可以在浩瀚的因特网海洋中找到我们所需的知识。然而,并不是所有的检索都是那么一帆风顺,人们搜索过程中找到的并不一定都是自己想要的内容,通常情况下,或多或少地夹杂着一些无关的网页,而且其中的一部分甚至排在了页面链接列表的前端,这是用户不愿意看到的。解决问题的途径就是通过Web挖掘技术。本文将重点讨论
期刊