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?
sumber
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?
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 -p
menampilkan 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}'
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.
Ini juga akan menghasilkan rpms yang tidak diinstal, tetapi merupakan bagian dari sumber instalasi aktif Anda.
Jika Anda mencari sebuah utilitas yang akan bekerja seperti gcc
's -lLIBNAME
bendera, yang terlihat untuk sebuah file yang bernama libLIBNAME.so
maka 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 ]