"Yang" setara untuk perpustakaan bersama

9

Saya mencari utilitas yang akan berperilaku dengan cara yang sama which, tetapi untuk mencari perpustakaan bersama (* .so) di direktori yang ditentukan dalam $ LD_LIBRARY_PATH?

rahmu
sumber

Jawaban:

5

Jika Anda memiliki executable dan Anda ingin melihat di mana ia mengambil perpustakaan, jalankan

ldd /path/to/executable

Ini akan memperhitungkan perpustakaan di jalan pencari default serta perpustakaan dalam eksekusi ini rPath jika ada.

Di Linux, jalur ke pustaka sistem di-cache untuk efisiensi. /sbin/ldconfig -pmenampilkan isi cache (disimpan dalam /etc/ld.so.cache). Berikut skrip yang menunjukkan lokasi perpustakaan:

#!/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}'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
5

Jika perpustakaan Anda di-cache dengan benar, Anda harus dapat menemukannya melalui:

ldconfig -p|grep "yourlibrary"

Jika Anda mencari perpustakaan yang datang dengan distribusi Anda, Anda bisa menggunakan sarana distribusi untuk mencari file dalam paket.

  • zypper wp "* / library.so" (SLES dan OpenSuSE)
  • yum menyediakan "* / library.so" (RedHat dan klonnya)

Ini juga akan menghasilkan rpms yang tidak diinstal, tetapi merupakan bagian dari sumber instalasi aktif Anda.

Nils
sumber
3

Jika Anda mencari sebuah utilitas yang akan bekerja seperti gcc's -lLIBNAMEbendera, yang terlihat untuk sebuah file yang bernama libLIBNAME.somaka Anda mungkin bisa menggunakan sedikit script yang melakukan sesuatu seperti ini:

#!/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 ]
amphetamachine
sumber
1
Terima kasih untuk skripnya tapi saya benar-benar bertanya-tanya apakah ada utilitas "standar" untuk ini.
rahmu