2011-07-12 52 views
7

有沒有任何編程方式(系統調用?)列出Linux上的共享庫依賴項?而不是使用ldd ...列出Linux上共享庫依賴項的編程方式

+0

system(「ldd myfile」);? –

+1

只是一個真正的答案到達之前的通用答案:你總是可以檢查程序的源代碼(在這種情況下'ldd')來查看它的功能。 –

回答

0

將LD_TRACE_LOADED_OBJECTS環境變量設置爲非空字符串並運行您的二進制文件。看看this手冊頁。 rpm包的

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

如果我想檢查共享庫的依賴關係,而不是二進制文件,該怎麼辦?在這種情況下,我無法運行共享庫...謝謝。 – flyingbin

+0

您可以這樣在共享庫上運行ld.so:/lib/ld-2.11.2.so --list /lib/libc.so.6 – ks1322

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

readelf -d lib.so更加高效,因爲它不會「 t需要解碼*全部*信息。此外,這並不提供'ldd'提供的完整(傳遞)依賴項列表;只有直接的。 –

0

這是一個簡單的bash腳本我用自己在Fedora上,它依賴於發現之需要,你可以看看裏面找到,需要找什麼樣的工具內部使用。

#!/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)' \;