如何在OSX上找到进程加载的共享库?

时间:2016-07-24 06:56:14

标签: macos shared-libraries osx-snow-leopard dylib dyld

我正在尝试编译并使用共享C库作为python模块,我观察到,根据DYLD_LIBRARY_PATH我的代码工作,或者它与一个神秘的错误消息崩溃。

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个文件?我无法使用opensnoopdtruss来解决这个问题,但我可能错误地使用了这些工具。

如何找出导致此次崩溃的原因?

1 个答案:

答案 0 :(得分:8)

您可以在环境中设置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
$