如何查找OSX上的进程加载哪个共享库?
问题描述:
我想编译和使用一个共享的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
之间,但我一直没能找到失事的原因。找出问题原因的一种方法是找出哪两个进程使用哪个文件?我无法使用opensnoop
或dtruss
来计算这个值,但也许我错误地使用了这些工具。
我怎样才能找出这次事故的原因?
答
您可以在环境中设置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
$
我投票关闭这一问题作为题外话,因为它已经交叉张贴在更适合的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