実行時に共有ライブラリにリンクするプロセスを実行すると(プロセスの開始時にリンクされ、後でリンクされませんdlload()
)、.so
それ以外の共有ライブラリ()ファイルはどこで検索されますLD_LIBRARY_PATH
か?
バックグラウンド:
特定のサードパーティライブラリを使用するC ++コードをいくつか作成しました。ライブラリをインストールし、コードを2つの異なるプラットフォーム(Ubuntuが異なるバージョン、および異なるバージョンのgccの両方)でコンパイルしました。ライブラリはソースからコンパイルおよびインストールされ/usr/local/lib
、両方のプラットフォームにあります。コードをコンパイルするときにpkg-config --libs
、サードパーティライブラリのパラメーターとリンクし、pkg-config --libs
両方のプラットフォームでまったく同じものが返されることを確認しました。
私のコードは両方のプラットフォームで正常にコンパイルされ、両方のプラットフォームでLD_LIBRARY_PATH
定義されていません(または空として定義されています""
)。ただし、一方のプラットフォームで実行すると正常に動作し、他方ではこのエラーが発生します:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Funnily十分で、もののない作業があり、新しい Ubuntuとのgccのバージョン。:/
だから私は、壊れた人が同じ方法でライブラリを見つけることができるように、作業中の人がどのようにライブラリを見つけることができるかを理解しようとしています。(つまり、設定なしLD_LIBRARY_PATH
)
更新:
ここからの私の出力です cat /etc/ld.so.conf.d/*
...動作している(古い)システム上:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
...壊れた(新しい)システムで:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
、それでもエラーが発生しますerror while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... ディレクトリを取得しない理由はあります/etc/ld.so.conf.d/*.conf
か?
sudo ldconfig -v
以下に示すように実行してみてください。それでも動作しない場合は、質問をの出力で更新してくださいldd /path/to/your/application
。
/etc/ld.so.conf.d/*.conf
が、私にはわかりません。