Câu trả lời:
Nếu bạn có một tệp thực thi và bạn muốn xem nó đang nhặt thư viện ở đâu, hãy chạy
ldd /path/to/executable
Điều này sẽ giải thích cho các thư viện trên con đường tìm kiếm mặc định cũng như các thư viện trong của thực thi này rPath nếu có.
Trên Linux, đường dẫn đến thư viện hệ thống được lưu trữ cho hiệu quả. /sbin/ldconfig -p
hiển thị nội dung của bộ đệm (nó được lưu trữ trong /etc/ld.so.cache
). Đây là tập lệnh hiển thị (các) vị trí của thư viện:
#!/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}'
Nếu các thư viện của bạn được lưu trữ đúng cách, bạn nên tìm kiếm thông qua:
ldconfig -p|grep "yourlibrary"
Nếu bạn tìm kiếm một thư viện đi kèm với bản phân phối của mình, bạn có thể sử dụng phương tiện phân phối để tìm kiếm các tệp trong các gói.
Điều này cũng sẽ xuất ra các rpms không được cài đặt, nhưng là một phần của các nguồn cài đặt hoạt động của bạn.
Nếu bạn đang tìm kiếm một tiện ích sẽ hoạt động như cờ gcc
của nó -lLIBNAME
, tìm kiếm một tệp được gọi libLIBNAME.so
thì có lẽ bạn có thể sử dụng một tập lệnh nhỏ làm điều gì đó như thế này:
#!/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 ]