Я нашел этот пост очень полезным, так как мне нужно было исследовать зависимости от сторонней библиотеки (32 против 64-битных путей выполнения).
Я собрал рекурсивный bash-скрипт Q & D, основанный на предложении 'readelf -d' для дистрибутива RHEL 6.
Он очень простой и будет проверять каждую зависимость каждый раз, даже если она могла быть проверена ранее (то есть очень многословно). Вывод тоже очень простой.
#! /bin/bash
recurse ()
# Param 1 is the nuumber of spaces that the output will be prepended with
# Param 2 full path to library
{
#Use 'readelf -d' to find dependencies
dependencies=$(readelf -d ${2} | grep NEEDED | awk '{ print $5 }' | tr -d '[]')
for d in $dependencies; do
echo "${1}${d}"
nm=${d##*/}
#libstdc++ hack for the '+'-s
nm1=${nm//"+"/"\+"}
# /lib /lib64 /usr/lib and /usr/lib are searched
children=$(locate ${d} | grep -E "(^/(lib|lib64|usr/lib|usr/lib64)/${nm1})")
rc=$?
#at least locate... didn't fail
if [ ${rc} == "0" ] ; then
#we have at least one dependency
if [ ${#children[@]} -gt 0 ]; then
#check the dependeny's dependencies
for c in $children; do
recurse " ${1}" ${c}
done
else
echo "${1}no children found"
fi
else
echo "${1}locate failed for ${d}"
fi
done
}
# Q&D -- recurse needs 2 params could/should be supplied from cmdline
recurse "" !!full path to library you want to investigate!!
перенаправить вывод в файл и grep для «найдено» или «не удалось»
Используйте и изменяйте, на свой страх и риск, разумеется, по своему желанию.