2012-03-27 84 views
0

GCC C89连接到具有软链接到它

我只是希望对下面的共享库链接共享库。

我想知道为什么程序员创建了这么多的软链接。程序员离开了公司,我只是想知道目的是什么。

lrwxrwxrwx. 1  24 Jan 11 11:23 libsofia-sip-ua.so -> libsofia-sip-ua.so.0.6.0 
lrwxrwxrwx. 1  24 Jan 11 11:23 libsofia-sip-ua.so.0 -> libsofia-sip-ua.so.0.6.0 
-rwxrwxr-x. 1 4728304 Jan 11 11:19 libsofia-sip-ua.so.0.6.0 

对于我能理解的是,如果图书馆要更新到新版本,您可以将其与更新后的版本进行软链接。

但为什么要创建libsofia-sip.so.0?

非常感谢您的任何建议,

回答

3

当您使用-l选项指定要搜索/链接的库时,以.so结尾的文件名是链接程序(而非动态链接程序)使用的文件名。链接器不知道其他后缀,并且不会找到它们。当链接器打开该文件时,它会在库标题的DT_SONAME字段中找到不同的名称,通常是带有单个数字后缀的名称。这是它将存储在新程序的动态链接标题的DT_NEEDED字段中的名称。

.so.N(例如N = 0)结尾的文件名是与库文件中DT_SONAME对应的文件名,它代表一系列库文件版本,它们都具有兼容的ABI。

.so.N.X.Y结尾的文件名是当前安装的库版本的实际文件。可能存在多于一种的这种情况,而其他符号链接通常会设置为指向最新版本。但旧版本不会自动被这种方式覆盖,所以如果您需要降级的原因,您可以用LD_PRELOAD手动加载旧版本或替换符号链接。

+0

优秀的描述! – paulsm4 2012-03-27 03:28:54

1

最有可能的,图书馆的“实名”是libsofia-sip-ua.so.0。这被编码到共享对象中。 libsofia-sip-ua.0.6.0名称可能只是它安装的名称。

这可能是制作链接的ldconfig程序。如果库文件有其他名称,我相信它总是为嵌入名称创建一个链接。

所以它可能不是程序员谁想要这些额外的链接。他或他的图书馆构建工具将库文件命名为不同于库文件内嵌入的名称。

+0

他自己创建了软链接。谢谢。 – ant2009 2012-03-27 03:23:20