【问题标题】:How to find which shared library is loaded by a process on OSX? [closed]如何查找 OSX 上的进程加载了哪个共享库? [关闭]
【发布时间】:2016-11-27 17:16:15
【问题描述】:

我正在尝试编译和使用共享 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 来解决这个问题,但也许我用错了这些工具。

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

【问题讨论】:

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


【解决方案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
$

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2012-10-07
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多