Có thể tương đương với các thư viện chia sẻ


9

Tôi đang tìm kiếm một tiện ích có thể hoạt động theo cách tương tự which, nhưng để tìm kiếm các thư viện dùng chung (* .so) trong các thư mục được xác định trong $ LD_LIBRARY_PATH?

Câu trả lời:


5

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

5

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.

  • zypper wp "* / library.so" (SLES và OpenSuSE)
  • yum cung cấp "* / library.so" (RedHat và bản sao của nó)

Đ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.


3

Nếu bạn đang tìm kiếm một tiện ích sẽ hoạt động như cờ gcccủa nó -lLIBNAME, tìm kiếm một tệp được gọi libLIBNAME.sothì 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 ]

1
Cảm ơn kịch bản nhưng tôi thực sự tự hỏi liệu có tiện ích "tiêu chuẩn" nào cho việc này không.
rahmu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.