我有一个名为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?
答案 0 :(得分:1)
为什么链接到libssl.so.10而不是libssl.so?
在Linux上,允许使用多个同名的DSO,因此您可以(如您所说)libssl.so.11
和/或libssl.so.9
与libssl.so.10
一起安装。所有ldd
告诉您,abc.so
与libssl.so.10
相关联。这些版本号的更改通常表示向后不兼容,而不是简单的错误修正。
有没有一种情况,更新rpm会使用像libssl.so.11这样的情况,在这种情况下,abc.so中使用的动态链接文件会过时吗?
可能,因为再次允许多个库。但是,我希望发行版维护者永远不会在更新中引入一个向后不兼容的库。
另外,如果我有def.so,其中包含: /usr/lib/libssl.a(libssl64.so.0.9.8)
我不知道你到底在那里。看起来它引用了一个共享库。