linux - 在 .so 文件中更新动态链接的 .so 文件和在 .so 文件中更新静态链接的 .a 文件

标签 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 ?

最佳答案

Why is it linking to libssl.so.10 instead of libssl.so ?

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

is there ever a case that updating an rpm would use something like libssl.so.11 in which case the dynamically linked file used in abc.so would be out of date?

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

Also, if I have def.so which contains: /usr/lib/libssl.a(libssl64.so.0.9.8)

我不知道你那里有什么。看起来它向我引用了一个共享库。

关于linux - 在 .so 文件中更新动态链接的 .so 文件和在 .so 文件中更新静态链接的 .a 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23368080/

相关文章:

linux - 词频和-gt

linux - bash: child 无法正确获取其 PID

c++ - 链接到 Qt 中的共享库

c++ - 在 Boost 中找不到共享库 (Linux Mint)

c - 编译共享库时出现链接错误

linux - nohup重定向命令区别

linux - "crontab"与 "crontab -"当管道进入时?

PHP openssl_public_encrypt 导致页面超时/连接重置?

ruby-on-rails - 调用服务器到服务器 CloudKit Web 服务时出现授权错误

c++ - OpenSSL AES 加密错误