リンクされたライブラリ(libz.so.1.2.7)を必要とする「alpha」という名前のバイナリ実行可能ファイルがあります。 /home/username/myproduct/lib/libz.so.1.2.7
次のコマンドを実行してバイナリ実行可能ファイルを生成する前に、同じものをターミナルインスタンスにエクスポートします。
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
さて、同じライブラリを必要とするがバージョンが異なる別のアプリケーション「bravo」、つまりで使用可能な(libz.so.1.2.8)を生成すると
/lib/x86_64-linux-gnu/libz.so.1.2.8
、システムは次のエラーをスローします。
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
の設定を解除するとLD_LIBRARY_PATH
、「bravo」が正常に起動します。上記の動作は、リンクされたライブラリの検索中にLD_LIBRARY_PATH
定義されたディレクトリパスよりも優先される/etc/ld.so.conf
ため、上記のエラーが発生することを理解しています。ライブラリの最初のインスタンスが異なるバージョンである場合、UNIX / LINUXの開発者が、階層に従って他のディレクトリ内のリンクされたライブラリを検索するようにOSを設計しなかった理由に興味があります。
簡単に言えば、UNIX / LINUXシステムは、必要なライブラリが見つかるまで一連のディレクトリを走査します。しかし、バージョンに関係なくライブラリの最初のインスタンスを受け入れるのではなく、予想されるバージョンが見つかるまで同じことをしないのはなぜですか?
libz.so.1
へのシンボリックリンクですlibz.so.1.2.8