Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux上列出共享库依赖项的编程方法_Linux_Linker_Shared Libraries_Dependency Management - Fatal编程技术网

linux上列出共享库依赖项的编程方法

linux上列出共享库依赖项的编程方法,linux,linker,shared-libraries,dependency-management,Linux,Linker,Shared Libraries,Dependency Management,是否有任何编程方法(系统调用?)列出Linux上的共享库依赖项?不要使用ldd..将LD\u TRACE\u LOADED\u OBJECTS环境变量设置为非空字符串,然后运行二进制文件。请看手册页 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), i

是否有任何编程方法(系统调用?)列出Linux上的共享库依赖项?不要使用
ldd
..

将LD\u TRACE\u LOADED\u OBJECTS环境变量设置为非空字符串,然后运行二进制文件。请看手册页

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. 

这是我自己在Fedora上使用的简单bash脚本,它依赖于rpm包的find requires,您可以查看find requires以找到它内部使用的工具

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

GentooLinux有一个lddtree.sh


您可能会发现它很有帮助。

在真正的答案出现之前,只需给出一个一般性的答案:您可以随时检查程序的源代码(在本例中为
ldd
),查看它的功能。如果我想检查共享库而不是二进制文件的依赖性,该怎么办?在这种情况下,我无法运行共享库。。。谢谢。您可以通过这种方式在共享库上运行ld.so:/lib/ld-2.11.2.so--list/lib/libc.so.6readelf-d lib.so效率更高,因为它不需要解码所有信息。此外,这并没有提供“ldd”提供的完整(可传递的)依赖项列表;只有直接的。
#!/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)' \;