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

8
我尝试将一个共享的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 找到它们,也许我使用这些工具的方法不正确。

如何找到这个崩溃的原因?


我投票将此问题标记为离题,因为它已经在更适合的Stack Exchange网站上进行了交叉发布。未来,请只在一个Stack Exchange网站上发布您的问题。有关更多信息,请参见这里。(http://apple.stackexchange.com/questions/247227/how-to-find-which-shared-library-is-loaded-by-a-process-on-osx)。 - Matt
这个问题对我来说似乎完全符合主题(假设您想要调试编译配置)。但是它是 https://dev59.com/OHI95IYBdhLWcg3wtwb4 的重复。 - Gabriel Devillers
1个回答

13

您可以在环境中设置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 overflow 提供, 点击上面的
可以查看英文原文,
原文链接