免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 865 | 回复: 0
打印 上一主题 下一主题

Linux中利用系统库文件来降低工作量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-26 17:19 |只看该作者 |倒序浏览
在不同的开发环境中,往往都有给子的库文件。库文件就是那些为了实现某个特定功能的代码或者程序。在开发应用程序的时候可以直接拿来使用。如此就可以降低开发的工作量。在Linux操作系统中,也提供了很丰富的库文件。为此如果Linux操作系统开发人员能够学会使用这个库文件,那么就可以在很大程度上降低工作量。具体的来说,Linux系统管理员需要了解三方面的内容。一是常用的库文件,二是库文件调用的方法,三是为什么推荐使用共享库。了解这些内容,系统管理员就可以在程序开发过程中调用库文件了。对于库文件中到底包含哪些内容,系统管理员可以参考相关的书籍,笔者在这里就不做过多阐述了。笔者现在只谈谈库文件的调用方法以及笔者他们之间的差异,以帮助各位读者确定到底还是用静态库还是使用动态库。
  一、库文件的调用方法。
  使用库文件可以隐藏具体的实现。如系统管理员在使用这个库文件时,只需要包含所需要函数所在的头文件即可。而不用关系这个函数的具体实现。这就
好像用手机打电话一样。系统管理员只需要知道怎么用手机拨打电话即可,而不需要知道其内部的线路是怎么布置的,信号是如何在两个手机直接进行传递的,数字
信号怎么转换成语音信号的等等,这些内容都不需要知道。另外,使用库文件可以降低开发的工作量。有些功能可能在多个应用程序中都需要用到,那么通过库文件
的话,就不需要重复编写代码与编译了。为此可以在很大程度上降低开发的工作量。
  那么系统管理员可以采用什么样的方式来调用这个库文件呢?在Linux操作系统的开发环境下,主要有两种调用的方式。一种是叫作静态库的调用方法。
在编译时将库中相应函数的二进制映像代码直接拷贝到当前编译的程序中。简单的说,就是直接通过代码的复制、粘贴来减少代码的开发。这跟有些人在写作文时东
拼西凑的方式相同。在Linux操作系统中,如果库文件是以.a为后缀,就表示为静态库文件。在用到这个静态库文件时,系统管理员可以直接以编辑器打开这
个库文件,把代码复制到自己的应用程序中,进行编译。
  第二种调用方法叫作共享库调用。若采用这种方法调用库文件的话,在编译时只需要引用库中相应函数的二进制印
象代码的入口位置。然后这个应用程序在运行时就会从共享库文件中读出这个函数代码,从而实现间接引用。也就是说,这个共享库就好像是一个客厅。只要用户在
房间与客厅之间开一道门,那么这个房间就可以使用这个客厅。而静态库则不同。静态库要使用这个客厅的话,他不是在房间与客厅之间开一道门,而是将这个客厅
都包含到自己的房间中,跟房间合为一体。所以这两种调用方法在实现机制上有很大的不同。同时这也决定了他们各有各的优缺点。系统管理员在使用这些库文件
时,不得不料接他们彼此的优缺点,然后选择合适的调用方式。
  二、共享库使用的优点。
  采用静态库的调用方法,优势很明显。由于此时静态文件的代码已经跟用户开发的代码融为一体,所以在执行这个应用程序时,就不需要再查找这个库的
路径。如此的话在执行这个可执行文件时就不需要任何库的支持。但是其缺点也是很明显的。如这个应用程序的多个子程序都需要用到这个库文件,那么就需要复制
多段相同的代码。此时无疑会增加代码的长度,增加维护的难度。最要命的是,对于应用程序的性能也会带来负面的影响。为此除非你开发的应用程序很简单,只完
成单一的功能,那么可以使用静态库。除此之外,笔者是建议各位读者采用共享库为好。具体的来说,采用共享库可以带来如下的优势。
  一是便于共享库文件的升级与维护。共享库中的文件也有可能本身就有问题,需要通过库文件升级来解决。此时如
果采用的是静态库的话,那么就不得不一一去更改引用了这个库文件的代码。当一个应用程序中引用了十次的话,那么就需要更改十个地方。显然这个后续维护的工
作量会很大。但是采用了共享库文件的话,则不同。此时只需要更改共享库中的库文件即可。由于在应用程序代码中只是指出了这个库文件的入库位置。为此只要这
个库位置没有发生变化的话,那么这个应用程序中的代码就不需要进行更改。所以,当共享库中的文件由于错误等原因需要进行升级的,那么对于应用程序不会有丝
毫的影响。此时只需要直接将库文件覆盖即可,而不需要重新编译应用程序的代码。这就好像带SIM卡与不带SIM小灵通的区别。如果现在用户想要换个号码,
那么对于带SIM卡的小灵通,只需要更换一张SIM卡即可。而对于不带SIM卡的小灵通,就需要更换整个小灵通。这个带SIM卡的小灵通就好像是共享库;
而不带SIM卡的小灵通就好像是静态库。
  二是提高代码的共享。当应用程序中的多个子程序需要使用同一个库文件时,Linux操作系统将共享库文件调
入到内存单元。此时无论有多少个子程序需要使用一段相同的代码时,只需要将这段代码放到共享内存中,而不需奥像静态库那样在所有的地方都将其直接加载到可
执行文件中。这跟看电影很像。采用共享库就好像是在电影院中看电影。电影只放映一次,但是很多人可以一起看这部电影。而采用静态库的话就好象是在自己的家
庭影院中看电影。如果三个家庭要看同一部电影,那么他们不得不各自在自己的家中打开家庭影院进行观看。无疑家庭影院的利用率并不高,至少没有电影院中的设
备那么高。同时这也会增加系统的负荷。每个家庭都利用自己的家庭影院看,如果三个家庭的话就会相当于多耗费2倍的电源。所以说,使用共享库的话,可以在很
大程度上节省系统的资源,特别是内存的开销,它可以让应用程序运行的更快。当所开发的应用程序越复杂,或者使用相同代码的几率越大,那么这个性能提升的效
果也就越明显。
  不过使用这个共享库文件有一个很大的缺陷,即此时可执行文件就与库文件有了一定的依赖关系。如某个可执行文件采用共享库的形式,其调用了某个库
文件。但是当这个可执行程序在其他Linux操作系统上运行的时候,很有可能这个库文件不存在或者版本比较低,此时这个可执行文件就可能无法运行或者运行
出现错误。为了避免这种情况,有时候不得不把需要用到的库文件跟可执行文件一起进行分发。另外就是在代码编写中,必须要指明库文件的搜索位置。否则这个应
用程序在执行时,就会找不到库文件的位置了。
  不过话说回来,这个共享库引用的缺陷都是可以解决的。为此相比其优势来说,这些缺陷就不足一提了。只要在软件打包或者软件安装之前进行必要的验
证,就可以很好的避免这个缺陷对于应用程序造成的负面影响。为此总的来说,笔者还是建议大家采用共享库的方式来调用库文件为好。特别是在设计一些大型的应
用程序或者可能有性能瓶颈的应用程序时,采用共享库会帮助系统管理员提升应用程序的性能。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98085/showart_1978713.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP