嵌入式系统开发下, 有时候要对库进行一些处理. 比如这个库没有被用到就可以被移除, 但是一般情况下没有去判断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