linux - .so补丁RedHat和Ubuntu之间的版本差异

标签 linux shared-libraries

我在 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.0libssl.so.1.0.2k 的链接来解决。对 libcrypto.so.1.0.0libcrypto.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/

相关文章:

linux - Visual Studio Code 1.0 x11 转发?

linux - 使用 Linux 组和用户权限设置 friend 共享空间

c - 如何判断一个so文件是否已经加载?

c++ - C++ api 应该如何布局?

linux - 使用 pscp 在 Raspberry Pi 上传输文件

c - 保存窗口大小和坐标

c++ - 将共享库链接到另一个共享库

c++ - GCC -m32 标志 :/usr/bin/ld: skipping incompatible

c - 如何在 Linux 应用程序中获取有关以太网的统计信息?

linux - 在Linux中,怎样才能完全忽略/etc/ld.so.cache的内容呢?