「which」は共有ライブラリと同じです。

「which」は共有ライブラリと同じです。

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

答え1

実行可能ファイルが存在し、その実行可能ファイルがライブラリをインポートする場所を確認するには、次の手順を実行します。

ldd /path/to/executable

デフォルトの検索パスのライブラリとこの実行可能ファイルのライブラリを検討してください。もしそうなら。

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}'

答え2

ライブラリが正しくキャッシュされている場合は、次のようになります。

ldconfig -p|grep "yourlibrary"

ディストリビューションに付属のライブラリを検索する場合は、パッケージに含まれているファイルを検索する配布方法を使用できます。

  • zypper wp "*/library.so"(SLESとOpenSuSE)
  • yum は "*/library.so" (RedHat とそのレプリカ) を提供します。

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

答え3

gccthenという名前のファイルを検索するフラグの-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 ]

関連情報