如何查找在Linux中执行期间实际使用的所有共享库?

问题描述

我有一个可执行文件,我想找出在特定运行期间实际使用了哪些共享库。我知道ldd会列出该可执行文件的所有共享库依赖关系,但我想找出在特定运行*中实际使用的那些子集。这可能吗?

*我的意思是在特定运行中使用某些输入参数运行可执行文件,这只会导致一小部分代码得以运行。

解决方法

您可以使用strace和grep来打开.so文件。

strace $MYPROG | grep -E '^open*\.so

lsof也应该对开放库进行grep处理。

lsof -p $PID | awk '{print $9}' | grep '\.so'

这假定共享库的扩展名为.so

,

您可以为此使用ltrace(1)

$ PROG='ls -l'
# Collect call info
$ ltrace -o calls.txt -l '*' $PROG &> /dev/null
# Analyze collected data
$ cat calls.txt | sed -ne '/->/{ s/^\(.*\)->.*/\1/; p }' | sort -u
libacl.so.1
libcap.so.2
libc.so.6
libselinux.so.1
ls
# Compare with ldd
$ ldd /bin/ls | wc -l
10

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...