我在 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
tolibssl.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 的系统兼容。