我们正在使用一个需要加载libssl
版本的库1.0.*
。它不适用于libssl.so.1.1
.我们需要它在任何 Linux 系统上工作。
我们尝试加载各种版本,这通常有效,但在一个客户的系统上只有以下内容:
/usr/lib64/libssl.so.1.1.0g
/usr/lib64/libssl.so.10
/usr/lib64/libssl.so.1.0.2m
/usr/lib64/libssl.so.1.1
我们正在尝试加载libssl.so.1.0
and ,但由于尾随“ ”libssl.so.1.0.2
而找不到。libssl.so.1.0.2m
m
我想知道 libssl 的命名方案是什么(如果有的话)?
我们真的需要提供我们自己的版本还是有更好的方法?
我们应该从libssl.so.1.0.2z
下循环到 吗libssl.so.1.0.2a
?我们应该手动扫描库路径吗?
答案1
我不确定你是如何打开的libssl
- 我想dlopen()
?
在硬编码的目录路径列表中搜索库听起来相当脆弱 - 您最好让动态链接器为您完成这项工作。也许解析 的输出ldconfig -p
值得尝试?在 Debian 系统上,我看到以下内容:
$ ldconfig -p|grep ssl
libssl.so.1.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.1
libssl.so.1.0.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2
在 RHEL 7.4 系统上:
$ ldconfig -p|grep ssl
libssl3.so (libc6,x86-64) => /lib64/libssl3.so
libssl.so.10 (libc6,x86-64) => /lib64/libssl.so.10
请注意,在 Debian 系统上,库位于 中/usr/lib/x86_64-linux-gnu
,而在 RHEL 系统上,库位于 中/lib64
(另请注意库名称差异很大)。除非您使用类似于 的输出的内容ldconfig
,否则如果您打算“在任何 Linux 系统上工作”,则必须自己搜索所有这些特定于发行版的路径。诚然,目录路径已列出,/etc/ld.so.conf
但我认为使用ldconfig
可能仍然更容易。