バージョン1.0.*
でlibssl
をロードする必要があるライブラリを使用しています。 libssl.so.1.1
では機能しません。どのLinuxシステムでも動作する必要があります。
私たちはさまざまなバージョンをロードしようとしますが、これは通常は機能しますが、1人の顧客のシステムでは、次のものだけがあります。
/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
とlibssl.so.1.0.2
を読み込もうとしていますが、末尾の "m
"が原因でlibssl.so.1.0.2m
が見つかりません。
もしあれば、libsslの命名方式は何ですか?
本当に私たち自身のバージョンを提供する必要がありますか、それとももっと良い方法がありますか?
libssl.so.1.0.2z
からlibssl.so.1.0.2a
までループする必要がありますか?ライブラリパスを手動でスキャンする必要がありますか?
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
を使用する方がおそらく簡単です。