Come trovare quale libreria condivisa è caricata da un processo su OSX?

2

Sto cercando di compilare e usare una libreria C condivisa come un modulo python e sto osservando che a seconda del DYLD_LIBRARY_PATH il mio codice funziona o si blocca con un messaggio di errore criptico.

Jul 24 02:44:44 master 
$ DYLD_LIBRARY_PATH=/opt/local/lib  python -c 'import opengm' 
OKAY

Jul 24 02:45:41 master 
$ DYLD_LIBRARY_PATH= python -c 'import opengm' 
python(86214,0x7fff70ccdcc0) malloc: *** error for object 0x7fff70177500: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap

Ho provato a controllare manualmente quali librerie sono comuni tra /usr/lib e /usr/local/lib e /opt/local/lib ma non sono stato in grado di trovare la causa dello schianto. Un modo per capire la causa del problema sarà capire quali file di dylib utilizzano i due processi? Non ero in grado di capirlo usando opensnoop o dtruss ma forse stavo usando quegli strumenti sbagliati.

Come posso capire la causa di questo incidente?

ESCLUSIONE DI RESPONSABILITÀ: Ho postato la stessa domanda su SO 2 giorni fa, dove non ha ricevuto eventuali risposte e solo 8 visualizzazioni.

    
posta Pushpendre 25.07.2016 - 21:41
fonte

2 risposte

2

Puoi impostare DYLD_PRINT_LIBRARIES=YES nell'ambiente per avere dyld stampare ogni libreria dinamica caricata nel processo:

$ DYLD_PRINT_LIBRARIES=YES /usr/bin/true 
dyld: loaded: /usr/bin/true
dyld: loaded: /usr/lib/libSystem.B.dylib
[ ... snip ... ]
dyld: loaded: /usr/lib/libc++.1.dylib
dyld: loaded: /usr/lib/libDiagnosticMessagesClient.dylib
$
    
risposta data 26.07.2016 - 19:11
fonte
2

Un programma che può mostrare quali file dylib sono stati utilizzati per eseguire un programma è otool .

otool -L /path/to/program
    
risposta data 25.07.2016 - 21:51
fonte

Leggi altre domande sui tag