2016-07-24 22 views
0

Я пытаюсь скомпилировать и использовать общую библиотеку C как модуль python, и я наблюдаю, что в зависимости от DYLD_LIBRARY_PATH мой код работает, или он сбой с криптовым сообщением об ошибке.Как найти, какая разделяемая библиотека загружается процессом на OSX?

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 

Я попытался вручную проверять, какие библиотеки являются общими /usr/lib и /usr/local/lib и /opt/local/lib, но я не смог найти причину аварии. Один из способов выяснить причину проблемы - выяснить, какие файлы dylib используют эти два процесса? Я не смог понять это, используя opensnoop или dtruss, но, возможно, я использовал эти инструменты неправильно.

Как я могу выяснить причину этой аварии?

+0

Я голосую, чтобы закрыть этот вопрос не по теме, так как он перекрестно отправил на более подходящем сайте Stack Exchange. В будущем, пожалуйста, публикуйте свой вопрос только на одном сайте Stack Exchange. Для получения дополнительной информации см. [Здесь] (http://meta.stackexchange.com/q/64068). (Http://apple.stackexchange.com/questions/247227/how-to-find-which-shared-library-is-loaded-by-a-process-on-osx). – Matt

ответ

1

Вы можете установить DYLD_PRINT_LIBRARIES=YES в окружающей среде, чтобы иметь dyld печати каждые динамические библиотек, которые он загружает в процесс:

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