2011-07-12 31 views
7

Có cách nào lập trình (gọi hệ thống không?) Để liệt kê phụ thuộc thư viện được chia sẻ trên Linux? Thay vì sử dụng ldd ...Cách lập trình để liệt kê phụ thuộc thư viện được chia sẻ trên linux

+0

hệ thống ("ldd myfile") ;? –

+1

chỉ là một câu trả lời chung trước khi một thực tế đến: bạn luôn có thể kiểm tra nguồn của chương trình (trong trường hợp này 'ldd') để xem những gì nó làm. –

Trả lời

0

Đặt biến môi trường LD_TRACE_LOADED_OBJECTS thành chuỗi không trống và chạy nhị phân của bạn. Hãy xem trang this người đàn ông.

LD_TRACE_LOADED_OBJECTS 
    (ELF only) If set to non-empty string, causes the program to list its dynamic library dependencies, as if run by ldd(1), instead of running normally. 
+0

Điều gì sẽ xảy ra nếu tôi muốn kiểm tra sự phụ thuộc của một thư viện được chia sẻ chứ không phải nhị phân? Trong trường hợp này, tôi không thể chạy thư viện được chia sẻ ... Cảm ơn. – flyingbin

+0

Bạn có thể chạy ld.so trên thư viện được chia sẻ theo cách này: /lib/ld-2.11.2.so --list /lib/libc.so.6 – ks1322

4
readelf -Wa lib.so|grep NEEDED 
+4

readelf -d lib.so hiệu quả hơn nhiều, vì nó không t cần giải mã * tất cả * thông tin. Ngoài ra, điều này không cung cấp danh sách phụ thuộc hoàn chỉnh (transitive) mà 'ldd' cung cấp; chỉ những cái trực tiếp. –

0

Đây là kịch bản bash đơn giản tôi sử dụng bản thân mình trên Fedora, nó dựa trên find-đòi hỏi của gói rpm, bạn có thể nhìn vào bên trong tìm-đòi hỏi để tìm những công cụ đó trong nội bộ sử dụng.

#!/bin/bash 
# 
# Use rpm to recursively list dependencies of all files in a directory 
# 
# Syntax: 
# lsdep path/to/directory 
# Example: 
# lsdep /usr/src/kernels/`uname -r`/ 

find $1 -type f -exec sh -c 'res=`echo '{}' | /usr/lib/rpm/find-requires`; [ -n "$res" ] && (echo;echo file '{}'; echo $res)' \; 
Các vấn đề liên quan