下面展示一个简单的perl程序,功能是根据参数列表中提供的一个或多个文件名,以每一行为一个单位逐一读取作为路径,如果该路径是一个可执行文件,可以由此找出其所依赖的共享库,并且生成到一个汇总列表中。这样的功能可以作为应用程序打包功能(主要是处理依赖关系)的一部分。
while (<>) //神奇的钻石操作符,读取参数列表中的所有文件内容
{
chomp;
if (-d $_) //对于目录,存入目录列表中
{
$dir_set{$_} =0;
}
else
{
$path_set{$_} =0;
&relate($_)if -x -B $_ and (not -l $_); //对于可执行文件,遍历依赖关系
}
}
foreach (sort keys %path_set)
{
print"$_\n";
}
foreach (sort keys %dir_set)
{
print"$_/\n";
}
sub relate
{
foreach (`readelf -d $_[0]`) //读取可执行文件所依赖的共享库
{
if ((/Shared library: \[(.*)\]/)and (not exists $find_flag{$1}))
{
$find_flag{$1} =0 ;
foreach (`find / -name $1`) //查找共享库所在的路径
{
chomp;
relate($_);
$path_set{$_} =0;
}
}
}
}