This script uses otool -L to determine and print all dynamic library dependencies of a given executable or library file recursively and you use it like this:
$ checklibs.pl /bin/ls
/bin/ls:
/usr/lib/libgcc_s.1.dylib
/usr/lib/libncurses.5.4.dylib
/usr/lib/libSystem.B.dylib
/usr/lib/libgcc_s.1.dylib:
/usr/lib/libSystem.B.dylib
/usr/lib/libncurses.5.4.dylib:
/usr/lib/libgcc_s.1.dylib
/usr/lib/libSystem.B.dylib
/usr/lib/libSystem.B.dylib:
/usr/lib/system/libmathCommon.A.dylib
Here’s the script which was written by Marc Liyanage:
#!/usr/bin/perl
#
# Written by Marc Liyanage <http://www.entropy.ch>
# use strict;
use warnings;
my ($file) = @ARGV;
die $! unless (-f $file);
my $libs = {};
check_libs(file => $file, libs => $libs);
print
map {("\n$_:\n", map {"\t$_\n"} sort {lc($a) cmp lc($b)} @{$libs->{$_}})}
sort {lc($a) cmp lc($b)}
grep {@{$libs->{$_}}}
keys(%$libs);
sub check_libs {
my (%args) = @_;
my $libs = $args{libs};
my @file_libs = grep {$_ ne $args{file}} grep {$_} map {/^\s+(\S+)/} qx(otool -L $args{file});
$libs->{$args{file}} = \@file_libs;
foreach my $lib (grep {!$libs->{$_}} @file_libs) {
unless (-f $lib) {
$libs->{$lib} = ['(missing)'];
next;
}
check_libs(%args, file => $lib);
}
}
In case my blog software mangles the code above, you can download the script in a plain text file by clicking here: checklibs.zip