openssl .so 库版本不兼容

openssl .so library version incompatible

我想将 OpenSSL 包从 1.0.0 升级到 1.1.1d。但是,还有另一个包 OpenDKIM 依赖于 OpenSSL 旧版本 1.0.0。所以我做了一个符号链接如下

ln -s libssl.so.1.1 libssl.so.1.0.0
ln -s libcrypto.so.1.1 libcrypto.so.1.0.0

下面是ldd binary

的结果
libssl.so.1.1 => /usr/lib/zmta/libssl.so.1.1 (0x00007fb6a52b4000)
libcrypto.so.1.1 => /usr/lib/zmta/libcrypto.so.1.1 (0x00007fb6a4df3000)
libopendkim.so.10 => /usr/lib/libopendkim.so.10 (0x00007fb6a4bd7000)

编译机centos7编译正常。但是,当我尝试 运行 Ubuntu-18.04 中的二进制文件时,发生了以下错误。

libcrypto.so.10: version `libcrypto.so.10' not found (libopendkim.so.10). No file or directory named libcrypto.so.10

所以我创建了一个符号链接文件libcrypto.so.10指向libcrypto.so.1.1,但是出现了下面的错误。

libcrypto.so.10: version `libcrypto.so.10' not found (libopendkim.so.10)

我无法解决这个错误。非常感谢任何帮助。

OpenSSL 包可以是您用于应用程序的多个其他依赖包的依赖项。

如果您尝试将依赖项与您的应用程序捆绑在一起,那么您将不得不手动处理依赖项。

如果您尝试升级 OpenSSL,则必须查看其他依赖项(如 OpenDKIM)是否支持升级版本的 OpenSSL。

如果其他依赖项(OpenDKIM) 支持升级版本的OpenSSL,您将不得不针对新版本的OpenSSL 重新编译这些依赖项(OpenDKIM)。

在上述情况下,仅添加指向旧版本库 libssl.so.1.0.0 的符号链接 libssl.so.1.1 将不起作用。

注意:在为您的应用程序重新编译其他依赖项 (OpenDKIM) 时,它们不会针对旧版本进行编译。即使您的 OpenSSL 已更新到所需的新版本,仍然存在旧库以实现兼容性。

在编译其他依赖时,如果使用系统中OpenSSL的旧版本库和头文件,会出现运行时版本不匹配的问题。