我在 Ubuntu 上构建了一个需要 libssl.so
的 .so(它需要 libssl.so.1.0.0
)。
安装的 libssl.so 的实际版本是 libssl.so.1.0.2k
,但是有一个链接 libssl.so.1.0.0
到那个文件,所以我想 Ubuntu 通过将它们替换为 .0
来处理补丁版本。
如果我尝试在 RHEL7 上使用那个 .so,它找不到它。我的 RHEL7 系统也安装了 libssl.so.1.0.2k
,但指向它的链接名为 libssl.so.10
。我推测 RHEL 通过丢弃补丁版本并将主要版本和次要版本混在一起来处理补丁版本。
我试图通过创建一个名为 libssl.so.1.0.0
到 libssl.so.1.0.2k
的链接来解决。对 libcrypto.so.1.0.0
和 libcrypto.so.1.0.2k
执行相同的操作。现在我得到一些奇怪的东西:
% ldd libironoxide_java.so
./libironoxide_java.so: /lib64/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ./libironoxide_java.so)
./libironoxide_java.so: /lib64/libssl.so.1.0.0: version `OPENSSL_1.0.0' not found (required by ./libironoxide_java.so)
./libironoxide_java.so: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./libironoxide_java.so)
linux-vdso.so.1 => (0x00007ffcfda70000)
libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007fc82d0d2000)
libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007fc82cc70000)
...
但是它找到的 libssl.so.1.0.0
不需要 OPENSSL_1.0.0
% objdump -p libssl.so.1.0.0 | grep SSL
3 0x00 0x066a2b21 OPENSSL_1.0.1
4 0x00 0x02b21533 OPENSSL_1.0.1_EC
5 0x00 0x066a2b22 OPENSSL_1.0.2
OPENSSL_1.0.1
0x02b21533 0x00 08 OPENSSL_1.0.1_EC
我在系统上找不到任何其他 libssl.so.1.0.0
实例,这应该是令人困惑的事情。
知道这里发生了什么吗?对于构建可在 Ubuntu 和 RHEL7 上运行的 .so
有什么建议吗?
最佳答案
RedHat 因广泛修改内核和库而广为人知。将关键库改写为 OpenSSL 以确保与基于 Debian 的系统的兼容性几乎是不可能的。
关于linux - .so补丁RedHat和Ubuntu之间的版本差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56875567/