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


2

Sto cercando di compilare e utilizzare una libreria C condivisa come modulo Python e sto osservando che a seconda del DYLD_LIBRARY_PATHmio 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/libe /usr/local/libe /opt/local/libma non sono stato in grado di trovare la causa dell'incidente. Un modo per capire la causa del problema sarà capire quali dylibfile usano i due processi? Non sono riuscito a immaginarlo usando opensnoopo dtrussma forse stavo usando quegli strumenti sbagliati.

Come posso capire la causa di questo incidente?

NOTA BENE: ho pubblicato la stessa domanda su SO 2 giorni fa, dove non ha ricevuto risposte e solo 8 visualizzazioni.


Benvenuti in AskDifferent! Per favore, non fare il crosspost. In futuro, se desideri spostare le domande su un altro sito, segnalalo per l'attenzione della mod e chiedi ai moderatori di migrarlo su un altro sito.
Nohillside

Sì, mi dispiace per il cross post.
Pushpendre,

Nessun problema, viviamo e impariamo tutti :-)
nohillside

Risposte:


2

È possibile impostare DYLD_PRINT_LIBRARIES=YESnell'ambiente di dyldstampare tutte le librerie dinamiche che carica 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
$

2

Un programma che può mostrare quali dylibfile sono stati usati per eseguire un programma è otool.

otool -L /path/to/program

spettacoli di otool @rpath/libz.1.dylibe @rpath/libpython2.7.dylib. Il resto delle librerie ha percorsi completi. Questo probabilmente significa che se in qualche modo ho impostato correttamente il percorso nel dylib compilato, allora andrà tutto bene. Grazie per la tua risposta.
Pushpendre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.