必要なすべての依存関係とともに、ディレクトリにアプリケーションをデプロイします。私たちのアプリケーションはLD_LIBRARY_PATHをこの場所に設定します。一部のライブラリ(OpenSSLなど)もシステムの場所にあります。実際、アプリケーションディレクトリからこれらの共有オブジェクトを削除すると、アプリケーションはすべての可能な災害(間違ったバージョンなど)にもかかわらず実行され続けます。むしろ、アプリケーションディレクトリから共有オブジェクトを削除すると、共有オブジェクトが見つからないという警告が表示されます。
LD_LIBRARY_PATHで特定のオブジェクトのみを見つけるように動的ローダの検索パスをリセットできますか?
ベストアンサー1
実行時にシステムパスがライブラリを検索するのを防ぐことはできないようですが、ld.soのマニュアルページによれば、ダイナミックリンカを使用してバイナリをリンクすると、-z nodeflib
システムライブラリパスは検索されません。 ldのマニュアルページにはこれが表示されないので、これが実際にサポートされているかどうかはわかりません。
別のアイデア:dockerなどのコンテナシステムを試してみてください。これは軽量の仮想マシンに似ており、ホストとは別にファイルシステムの一意のビューを持つことができ、必要なライブラリバージョンをコンテナに配置できます。 JVM / Pythonバージョンなどの共有ライブラリ以外のものでも機能します。私はそれをあまり使用しませんでしたが、このタイプのアプリケーションに最適です。