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呢?
非常感谢您的建议,
发布于 2012-03-27 11:22:16
当您使用-l选项指定要搜索/链接的库时,链接器(不是动态链接器)将使用以.so结尾的文件名。链接器不知道其他后缀,也找不到它们。当链接器打开该文件时,它会在库头的DT_SONAME字段中找到一个不同的名称,通常是带有单个数字后缀的名称。这是它将存储在新程序的动态链接标头的DT_NEEDED字段中的名称。
以.so.N结尾的文件名(例如,在您的示例中为ABI )是与库文件中的DT_SONAME对应的文件名,它表示一系列库版本,这些库版本都具有兼容的ABI。
以.so.N.X.Y结尾的文件名是当前安装的库版本的实际文件。其中可能存在多个符号链接,通常会将其他符号链接设置为指向最新版本。但旧版本不会以这种方式自动覆盖,因此您可以使用LD_PRELOAD手动加载旧版本,或者在需要降级的情况下替换符号链接。
发布于 2012-03-27 10:49:16
最有可能的是,这个库的“真名”是libsofia-sip-ua.so.0。这被编码到共享对象中。libsofia-sip-ua.0.6.0名称可能只是它安装时使用的一个名称。
可能是ldconfig程序创建了这些链接。如果库文件有其他名称,我相信它总是会为嵌入的名称创建一个链接。
所以可能不是程序员想要这些额外的链接。他或他的库构建工具将库文件命名为与库文件中嵌入的名称不同的名称。
https://stackoverflow.com/questions/9882669
复制相似问题