ライブラリがインストールされていて、プログラムで使用できるかどうかをテストしたいとします。使うことができます ldconfig -p | grep mylib
がシステムにインストールされているかどうかを確認します。しかし、ライブラリがLD_LIBRARY_PATH
?
その場合、プログラムはライブラリを見つけることができるかもしれませんが、ldconfig
は見つけられません。ライブラリがcombinedリンカーパスにあるかどうかを確認するにはどうすればよいですか?
実際にプログラムが手元にない場合でも機能する解決策を探していることを追加します(プログラムがまだコンパイルされていないなど)。特定のライブラリがld
に存在することを知りたいだけです。パス。
ldconfig
は、アクセスできるすべてのライブラリを一覧表示できます。これらのライブラリもキャッシュに保存されます。
/sbin/ldconfig -v -N
は、キャッシュを再構築せずに、通常のライブラリパスをすべてクロールし、使用可能なすべてのライブラリをリストします(非rootユーザーの場合は不可能です)。 LD_LIBRARY_PATHのライブラリは考慮されません(この投稿が編集前に言ったこととは逆に)が、次の行を使用してコマンドラインに追加のライブラリを渡すことができます。
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
:
をLD_LIBRARY_PATHでグローバルに(スペース)置き換えます
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
Gccを使用して簡単なテストプログラムをコンパイルし、ライブラリをリンクできます。次に、使用したライブラリをlddで確認できます。私はこのようなものを使用します:
echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lmylib - && ldd a.out | grep mylib
-Wl,--no-as-needed
は、ライブラリのシンボルが使用されないため、リンカーがライブラリを破棄しないようにします。