web-dev-qa-db-ja.com

ライブラリがパスにあるかどうかを確認する

ライブラリがインストールされていて、プログラムで使用できるかどうかをテストしたいとします。使うことができます ldconfig -p | grep mylibがシステムにインストールされているかどうかを確認します。しかし、ライブラリがLD_LIBRARY_PATH

その場合、プログラムはライブラリを見つけることができるかもしれませんが、ldconfigは見つけられません。ライブラリがcombinedリンカーパスにあるかどうかを確認するにはどうすればよいですか?

実際にプログラムが手元にない場合でも機能する解決策を探していることを追加します(プログラムがまだコンパイルされていないなど)。特定のライブラリがldに存在することを知りたいだけです。パス。

15
nbubis

ldconfigは、アクセスできるすべてのライブラリを一覧表示できます。これらのライブラリもキャッシュに保存されます。

/sbin/ldconfig -v -Nは、キャッシュを再構築せずに、通常のライブラリパスをすべてクロールし、使用可能なすべてのライブラリをリストします(非rootユーザーの場合は不可能です)。 LD_LIBRARY_PATHのライブラリは考慮されません(この投稿が編集前に言ったこととは逆に)が、次の行を使用してコマンドラインに追加のライブラリを渡すことができます。

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
15
lgeorget

:をLD_LIBRARY_PATHでグローバルに(スペース)置き換えます

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
2
fizwit

Gccを使用して簡単なテストプログラムをコンパイルし、ライブラリをリンクできます。次に、使用したライブラリをlddで確認できます。私はこのようなものを使用します:

echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lmylib - && ldd a.out | grep mylib

-Wl,--no-as-neededは、ライブラリのシンボルが使用されないため、リンカーがライブラリを破棄しないようにします。

2
guini