共有ライブラリと同等の「どちらか」


9

と同じように動作するユーティリティを探していますがwhich、$ LD_LIBRARY_PATHで定義されているディレクトリで共有ライブラリ(* .so)を検索しますか?

回答:


5

実行可能ファイルがあり、それがライブラリを取得している場所を確認するには、次を実行します。

ldd /path/to/executable

これにより、デフォルトの検索パスにあるライブラリと、この実行可能ファイルのrpathにあるライブラリ(存在する場合)が考慮されます。

Linuxでは、効率を上げるために、システムライブラリへのパスがキャッシュされます。/sbin/ldconfig -pキャッシュの内容を表示します(キャッシュに保存されます/etc/ld.so.cache)。ライブラリの場所を表示するスクリプトは次のとおりです。

#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
  set -f
  IFS=:
  for d in $LD_LIBRARY_PATH; do
    if [ -e "$d/$1" ]; then echo "$1"; fi
  done
fi
/sbin/ldconfig -p |
awk -v needle="$1" '$1 == needle {sub(/.* => /, ""); print}'

5

ライブラリが適切にキャッシュされている場合は、次の方法でライブラリを見つけることができます。

ldconfig -p|grep "yourlibrary"

ディストリビューションに付属のライブラリを検索する場合、パッケージ内のファイルを検索するディストリビューション手段を使用できます。

  • zypper wp "* / library.so"(SLESおよびOpenSuSE)
  • yumは "* / library.so"(RedHatとそのクローン)を提供します

これは、インストールされていないがアクティブなインストールソースの一部であるrpmも出力します。


3

呼び出されたファイルを探すgcc-lLIBNAMEフラグのように機能するユーティリティを探しているlibLIBNAME.so場合は、おそらく次のような小さなスクリプトを使用できます。

#!/bin/sh
ldpath="${LD_LIBRARY_PATH:-$(</etc/ld.so.conf)}"
notfound=1
for libdir in ${ldpath//:/ }; do
        (test -f "$libdir/lib${1}.so" && echo "$_") && notfound=0
done
[ "$notfound" -eq 0 ]

1
スクリプトに感謝しますが、これに「標準」のユーティリティがあるかどうかは本当に疑問です。
rahmu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.