嵌入式系统开发下, 有时候要对库进行一些处理. 比如这个库没有被用到就可以被移除, 但是一般情况下没有去判断dlopen的库信息, 所以会造成误删除的情况.
这个bash脚本用来搜索指定目录或指定文件是否有使用dlopen的库及可执行文件.
注意: 该脚本因为是通过对二进制文件的分析实现所有有可能搜到实际上未使用dlopen的文件.
#!/bin/sh
ARGUMENT=""
check_dlopen()
{
file $1 | grep "LSB executable\|LSB shared object" > /dev/null 2>&1
if [ $? != 0 ] ; then
return
fi
readelf -s $1 | grep "\<UND dlopen\>" > /dev/null 2>&1
if [ $? != 0 ] ; then
return
fi
echo "File $1 has dlopen function"
echo "dlopen possiable file list:"
strings -a $1 | grep "\.so" |sed -e 's/^/ /'
}
check_arg()
{
if [ -f "$1" ] ; then
check_dlopen $1
elif [ -d "$1" ] ; then
for i in $(find "$1" -type f); do
check_dlopen $i
done
fi
}
usage()
{
cat << END >&2
Usage: $progname [options] dir-name/file-name
Options:
{-h|--help}
print help.
END
}
while [ $# != 0 ]; do
case $1 in
-h | --help) usage ; exit 1 ;;
-*) usage ; exit 1 ;;
*) ARGUMENT="$ARGUMENT $1";;
esac
shift
done
if [ -z "$ARGUMENT" ] ; then
usage
exit 1
fi
check_arg $ARGUMENT