ldd获得可执行程序的所有库并输出到指定目录

时间:2022-11-19 12:41:52
#!/bin/bash

##########################################################################
#ldd可以查看程序的库依赖情况,请写一个脚本,将任意一个程序依赖的库收集到一个文件夹.
#其中:
#    输入参数为:可执行程序(或库)文件(包含路径)和输出文件夹;
#    输出收集日志,并将依赖的库收集到指定文件夹。
##########################################################################

##########################################################################
#FileName: GetSoFile.sh
#Function: generate so file list.
#Create time: 2015.09.15
#########################################################################

module="$1"
path="./$2"

ldd $module | awk -v path=$path                                \
'                                                            \
BEGIN{                                                        \
    "mkdir -p '$path'" | getline;                            \
    system("echo get lib, the file path is "path"");        \
}                                                            \
!/not found/{                                                \
            if(NF == 4)                                        \
            {                                                \
                libpath=$(NF - 1);                            \
                system("cp "libpath" "path"");                \
                print "cp "libpath" "path"";                \
            }                                                \
        }                                                    \
/not found/{                                                \
            lib=$1;                                            \
            cmd="locate "lib" | head -n 1";                    \
            cmd|getline pos;                                \
            cpcmd="cp "pos" "path"";                        \
            cpcmd|getline;                                    \
            print "cp "pos" "path"";                        \
        }                                                    \
END{                                                        \
    system("echo get lib ok.");                                \
}
'