我试图编译并使用共享的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
两个进程使用哪些文件?我无法弄清楚是否使用了该工具,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 $