美文网首页Other
[OS] Linux共享库的组织

[OS] Linux共享库的组织

作者: 何幻 | 来源:发表于2016-10-26 15:21 被阅读19次

由于动态链接的诸多优点,大量的程序开始使用动态链接机制,导致系统里面存在数量极为庞大的共享对象。如果没有很好的方法将这些共享对象组织起来,整个系统中的共享对象文件则会散落在各个目录下,给长期维护、升级造成了很大的问题。所以操作系统一般会对共享对象的目录组织和使用方法有一定的规则。

共享库的开发者会不停的更改共享库的版本,以修正原有的Bug,增加新的功能或改进性能等。由于动态链接的灵活性,使得程序本身和程序所依赖的共享库可以分别独立开发和更新,但是共享库版本的更新可能会导致接口的更改或删除,这可能导致依赖于该共享库的程序无法正常运行。

既然共享库存在兼容性问题,那么保持共享库在系统中的兼容性,保证依赖于它们的应用程序能够正常运行时必须要解决的问题。有几种方法可用于解决共享库的兼容性问题,有效办法之一就是使用共享库版本的方法。

Linux有一套规则来命名系统中的每一个共享库,它规定共享库的文件名规则必须如下:libname.so.x.y.z。其中,lib是前缀,name是库的名字,.so是后缀,最后跟着的三个数字组成版本号。x表示主版本号(Major Version Number),y表示次版本号(Minor Version Number),z表示发布版本号(Release Version Number)。主版本号表示不兼容的升级,次版本号表示增量升级,发布版本号表示修正错误或性能改进等更新。

既然相同主版本号的共享库是兼容的,那么确定依赖关系时,只需要维护共享库的名字和主版本号即可,这就是共享库的SO-NAME。例如,libname.so.x.y.zSO-NAME就是libname.so.x。系统会为每个共享库在它所在的目录创建一个跟它的SO-NAME相同且指向它的软链接(Symbol Link),这个软链接会指向目录中主版本号相同,但是次版本号和发布版本号最新的共享库。这样依赖某个共享库的模块,在编译、链接和运行时,都可以使用共享库的SO-NAME,而不必使用详细的版本号了。

参考

程序员的自我修养 : 链接、装载与库——Chapter 8

相关文章

  • [OS] Linux共享库的组织

    由于动态链接的诸多优点,大量的程序开始使用动态链接机制,导致系统里面存在数量极为庞大的共享对象。如果没有很好的方法...

  • 6、linux共享库的组织

    共享库版本 1、兼容性,为了使共享库能够有更好的二进制兼容性,最好做到不要使用c++做接口,如果一定要使用需注意(...

  • 编译ffmpeg configure详解

    如果是编译Mac OS或linux的ffmpeg库,是比较简单的,不存在交叉编译。直接在Mac OS 或linux...

  • Golang动态库编译

    一、Linux 查看程序或库文件所依赖的共享库列表

  • linux共享库

    linux环境下,库文件包含静态函数库和动态函数库两种: 静态函数库: 这类库的名字一般是libxxx.a;利用静...

  • linux共享库

    共享库: 1.概念 共享库就是动态链接库,是在程序运行的时候加载的函数库。详细介绍:https://blog.cs...

  • CentOS 7 Worlpress5.4.1 部署

    1. 环境说明 OS:CentOS Linux release 7.7.1908 数据库:mysql 5.6.38...

  • Linux下的静态库和动态库

    linux下的库: linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库...

  • 安卓项目中so库选择(ndk abiFilters设置,arme

    背景 Android 系统本质是一个经过改造的 Linux 系统,so库是Linux系统上使用的共享库(类似win...

  • FTP文件传输工具 - FileZilla简单安装介绍

    FileZilla是一套支持Windows、Linux、Mac OS的FTP客户端共享软件,相比于FlashFXP...

网友评论

    本文标题:[OS] Linux共享库的组织

    本文链接:https://www.haomeiwen.com/subject/hcnduttx.html