快速业务通道

Linux下的动态共享链接库的分析与使用

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-20

  动态共享库的工作方式与静态链接库不同.对于每个使用静态链接库的应用程序而言,在应用程序中都存在着静态链接库拷贝.但是动态共享库却不是这样的,动态共享库是被所有使用它的应用程序共享的,无论调用一个动态共享库的进程有多少,系统中始终只运行着一个动态共享库,这里动态共享库中“共享”的含义.至于“动态”,则主要强调的是链接发生在什么阶段.对于静态链接库而言,链接过程发生在编译阶段,操作系统在加载程序时不再对程序做任何改变,因此“静态”链接;然而对于使用动态共享库的程序而言,编译器在编译程序时只知道程序

  将要使用到某个动态共享库中的某个符号.至于这个符号所对应的具体实体,在编译时则是未知的.从符号转换为实体的工作留给了操作系统在加载程序时支完成.这样一个转换过程实质上就是把程序的链接过程推迟到了程序执行时来完成.这与在编译期间完成链接雷管显然是不一样的.这也是动态共享库被冠以“动态”的原因.

  动态共享库有以下的优点,使它在Linux开发中比静态链接库更加的流行.

  (1) 节省内存

  动态共享库无论被多少应用程序使用,在内存中都只存在一个动态共享库的副本,而不像静态链接库那样,一个应用程序在运行中用到静态链

  接库,就会有多个静态链接库的副本 .

  (2) 节省磁盘

  这和节省内存有点相似,同样这也是静态链接库存在多个静态链接库的副本造成的.同样的应用程序,使用动态共享库编译出的版本通常比使用静态链接库编译出来的版本要小.因此,在嵌入式系统开发中使用动态共享库也不节省空间,提供了一种很好的选择.

  (3) 便于软件修复与升级

  动态共享是独立于应用程序存在的,因此,用新版本的动态共享库替旧版本的工作将变得非常容易.如果使用静态链接库的话,假设在一个静态库中发现了一个bug,那么要修正这个bug的话,就要重新编译所有使用这个静态库的应用程序,使用这个静态库的应用程序有很多的话,可以想像工作量是有多大.

  (4) 提高性能

  与采用静态链接库臃肿的应用程序相比,采用动态共享库的应用程序明显“苗条”得多,这样当操作系统加载应用程序时,是需要把应用程序

  复制到内存中的,这样的“苗条”的动态链接库也就有了很大的优势,同时提高了程序的性能.

  当然,动态链接库在有上述这些优势的同时,也有以下的几个劣势.复杂性,兼容性,调试困难.但是它在Linux上使用频率上仍然比静态链接库要高的多.应用的更加广泛.

  动态共享库的重要概念-----soname

  动态共享库有一个重要的概念---soname.动态共享库在Linux系统上是以文件的形式存在的,这样,每个动态共享库也就有一个文件名,假设把动态共享库的文件名定义为filename.那么牢记一件事性就是soname和filename不是一个概念的.在Linux下,每个动态共享库都被赋予一个按特定的名称,Linux的文档将其称之为soname.soname通常包含共享库的名字和版本号,通过soname,系统或链接器可以唯一地确定一个动态共享库.比如Linux的C函数库的soname是libc.so.6,这里,c是函数库的名字,6是该动态共享库的版本号.

  然而,应用程序并不是直接和名字为soname的文件相链接的.比如,对于Linux C库而言,尽管通常在系统中能够找到名为libc.so.6的文件,但这个文件实际上却只是一个软连接也就是符号链接.这里清楚地显示出libc.so.6是一个到libc-2.3.2.so的软连接.那么,这个软连接是由ldconfig建立的.ldconfig做的事情就是配置动态链接器的运行时绑定.对于一个编译好的动态链接库,如何知道它的soname是什么呢?可以使用readelf.readelf有一个选项-d,这个选项可以打印出ELF文件中dynameic段的内容.在ELF中的dynamic段中就包含着动态共享库的soname.在Linux系统中存在着一个文件 /etc/ld.so.conf.这个文件中的每

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号