на самом деле порядок ссылок можно определить с помощью ldd;если библиотека1 находится в командной строке компоновщика перед библиотекой2, то ldd будет отображать библиотеку1 перед библиотекой2
Теперь, основываясь на этом, я написал короткий скрипт на python, который показывает общие библиотеки в порядке ссылок - сначала выполняется поиск по всем зависимостямотображается ldd (для данного исполняемого файла.
Вот сценарий
EDIT: обратите внимание, что сценарий использует ldd, все еще может быть полезным; -)
#!/usr/bin/python
import subprocess
import sys
import re
visited_so = {}
ssplit = re.compile('\S+')
verbose = 0
def run_ldd( sopath ):
ret = []
pop = subprocess.Popen( [ 'ldd', sopath ], stdin = subprocess.PIPE, stdout = subprocess.PIPE)
[out, err] = pop.communicate()
for l in out.splitlines():
toks = ssplit.findall( l )
if len(toks) > 3:
ret.append( toks[2] )
return ret
def load_order_bfs( pqueue ):
while len(pqueue) != 0:
nextexe = pqueue.pop(0)
if verbose:
print 'visit ' + nextexe
if not nextexe in visited_so:
print nextexe
visited_so[ nextexe ] = 1
dependents = run_ldd( nextexe )
for sopath in dependents:
if not sopath in visited_so:
if verbose:
print '\tnext ' + sopath
pqueue.append( sopath )
if len( sys.argv ) == 1:
print sys.argv[0] + """ <path>
shows dependents of executable in symbol search order;
does a breadth first search over the dependents of the executable
"""
sys.exit(1)
load_order_bfs( [ sys.argv[1] ] )