#!/bin/sh # resolve .so dependencies using ldd find_path() { for i in /lib /usr/lib; do [ -e "$i/$1" ] && echo "$i/$1" && return 0 done return 1 } resolve_links() { local f while [ $# -gt 0 ]; do if [ -L "$1" ]; then local f=$(readlink $1) local p="$(find_path $f)" # echo "following $p" resolve_links $p fi echo "$1" shift done } find_deps() { local bin=$1 resolve_links $(ldd $bin 2>/dev/null | awk -F'=>' '{print $2}' | sed 's/(.*//') | while read f; do case $f in /*) echo $f;; *) find_path $f esac done } while [ $# -gt 0 ]; do find_deps $1 || exit 1 which $1 shift done | sort -u