- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Windows和Linux动态链接库技术研究
Windows和Linux动态链接库技术研究
[摘要]动态链接库技术是实现和设计程序常用的技术。分析和比较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
您可能关注的文档
- QPQ氮化盐成分分析仪控制和信号处理软件系统设计.doc
- QQ空间和腾讯微博全面打通社交整合模式担当腾讯营销重任.doc
- QJK―JS型区间综合监控系统结构和维护要点.doc
- QQ软件和德育教师工作创新实践探索.doc
- QS市场准入和企业应对策略初探.doc
- Q市都市海岸项目SWOT分析和经营战略研究.doc
- Q公司泰车研制项目进度计划和控制研究.doc
- RAPID3模型快速提升员工和组织绩效.doc
- R0110燃气轮机喘振故障诊断和分析.doc
- RapidChek SELECET方法和GBT13091―2002方法检测饲料中沙门氏菌比较研究.doc
- 《2025年公共卫生应急报告:AI疫情预测与资源调配模型》.docx
- 《再生金属行业2025年政策环境循环经济发展策略研究》.docx
- 2025年开源生态AI大模型技术创新与产业协同趋势.docx
- 《2025年智能汽车人机交互创新研究》.docx
- 2025年专利申请增长趋势下的知识产权保护机制创新分析报告.docx
- 《2025年数字藏品元宇宙技术发展趋势分析报告》.docx
- 2025年折叠屏技术迭代中AI功能集成市场反应量化分析报告.docx
- 《2025年教育培训视频化教学与会员学习服务》.docx
- 《2025年工业软件行业CAD国产化应用场景分析报告》.docx
- 《2025年生物制药行业趋势:单抗技术迭代与产业链自主可控规划》.docx
原创力文档


文档评论(0)