在.so文件中更新动态链接的.so文件,在.so文件中更新静态链接的.a文件

时间:2014-04-29 14:49:43

标签: linux openssl shared-libraries static-linking dynamic-linking

我有一个名为abc.so的.so文件 如果我输入:

ldd abc.so
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f76f9100000)

如果我输入:

ls -l /usr/lib64/libssl.so.10
/usr/lib64/libssl.so.10 -> libssl.so.1.0.1e

为什么链接到libssl.so.10而不是libssl.so?当我更新openssl rpm时,我注意到:

/usr/lib64/libssl.so.10

仍然存在,但是有一种情况是更新rpm会使用类似libssl.so.11的情况,在这种情况下,abc.so中使用的动态链接文件会过时吗?

另外,如果我有def.so,其中包含:

/usr/lib/libssl.a(libssl64.so.0.9.8)

由于它是静态链接的,这是否意味着无论libssl.a的版本是什么,因为它是静态链接的,它总是使用libssl64.so.0.9.8?

1 个答案:

答案 0 :(得分:1)

  

为什么链接到libssl.so.10而不是libssl.so?

在Linux上,允许使用多个同名的DSO,因此您可以(如您所说)libssl.so.11和/或libssl.so.9libssl.so.10一起安装。所有ldd告诉您,abc.solibssl.so.10相关联。这些版本号的更改通常表示向后不兼容,而不是简单的错误修正。

  

有没有一种情况,更新rpm会使用像libssl.so.11这样的情况,在这种情况下,abc.so中使用的动态链接文件会过时吗?

可能,因为再次允许多个库。但是,我希望发行版维护者永远不会在更新中引入一个向后不兼容的库。

  

另外,如果我有def.so,其中包含:   /usr/lib/libssl.a(libssl64.so.0.9.8)

我不知道你到底在那里。看起来它引用了一个共享库。