5 votes

Comment trouver quelle bibliothèque partagée est chargée par un processus sur OSX ?

Je cherche à compiler et à utiliser une bibliothèque C partagée en tant que module python et je constate que selon le DYLD_LIBRARY_PATH, mon code fonctionne ou plante avec un message d'erreur cryptique.

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

24 juil 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

J'ai essayé d'inspecter manuellement quelles bibliothèques sont communes entre /usr/lib et /usr/local/lib et /opt/local/lib mais je n'ai pas été capable de trouver la cause du plantage. Une façon de découvrir la cause du problème sera de déterminer quelles fichiers dylib les deux processus utilisent ? Je n'ai pas réussi à le découvrir en utilisant opensnoop ou dtruss mais peut-être que j'utilisais mal ces outils.

Comment puis-je découvrir la cause de ce plantage ?

AVIS DE NON-RESPONSABILITÉ : J'ai posé la même question sur SO il y a 2 jours, où elle n'a reçu aucune réponse et seulement 8 vues.

7voto

Maher4Ever Points 391

Vous pouvez définir DYLD_PRINT_LIBRARIES=YES dans l'environnement pour que dyld imprime toutes les bibliothèques dynamiques qu'il charge dans le processus :

$ 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
$

2voto

Christopher Points 965

Un programme qui peut montrer les fichiers dylib qui ont été utilisés pour exécuter un programme est otool.

otool -L /chemin/vers/programme

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X