En realidad, la orden de enlace se puede deducir mediante el uso de ldd; si library1 está en la línea de comando del enlazador antes de library2 luego ldd mostrará library1 antes de library2
Ahora, basado en esto, escribí un script corto de python que muestra las bibliotecas compartidas en orden de enlace - hace una búsqueda de ancho sobre todas las dependencias mostradas . por LDD (para un ejecutable dado
Aquí está la secuencia de comandos
EDIT: tenga en cuenta que la secuencia de comandos utiliza LDD, aún podría ser útil ;-)
#!/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] ])
Gracias, pero lo necesito para trabajar con arb programas originales, incluso si no conozco la línea de enlace con la que se compiló el programa. – atomice