Ubuntu Linux---GNU libc库
3.4.1 外部库版本化 链接过程中,链接器(ld)会查找以.so结尾的共享库文件。以.so结尾的库文件叫链接器名称,这是由他们在Linux上的使用方式决定的。当编译一个依赖某一共享库的应用程序时,仅仅是该共享库的soname(不是共享库的文件名)作为依赖关系被记录在应用程序的二进制代码中。运行时链接器就是使用共享库的soname来查找和装载该库的。共享库的soname只包含有大版本号(例如,libfoo.so.1) 当修改后的共享库与以前版本不兼容时,新的共享库必须有一个新的外部版本名称。也就是说,该库的soname必须改变。这些不兼容的修改包括:删除一个符号,去掉某函数的一个参数,改变了某函数的语义属性以致与以前的定义不再一致并且与老版本二进制不兼容等等。我们来看下面的例子。(见pdf附件 341.pdf) 3.4.2 符号版本化 就像前面所提到的,当对共享库所作的修改能够向前兼容时,我们只增大小版本号。这种修改包括增加一些新的接口同时又不改变已有的接口。但是,即使只做这种小版本的修改,也会出现一个很重要的问题:一个在某一小版本的共享库上编译的应用程序并不一定能够在以前小版本的库上运行。这是因为该应用程序可能使用了新增加的、以前小版本的库中没有的接口。为了解决这个问题,引入了符号版本化。符号版本化允许共享库记录下每个小版本都新增了什么内容。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |