我正在尝试使用 sprof 来分析一些软件(ossim),其中几乎所有代码都在共享库中。我已经生成了一个分析文件,但是当我运行 sprof 时,出现以下错误:
> sprof /home/eca7215/usr/lib/libossim.so.1 libossim.so.1.profile -p > log
Inconsistency detected by ld.so: dl-open.c: 612: _dl_open: Assertion `_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!
我遵循的说明说我需要 libc 版本至少为 2.5-34,我有 libc 版本 2.12.2(Gentoo,内核 2.6.36-r5)。
我找不到任何关于错误含义或(更有趣的是)如何修复它的解释,唯一半相关的谷歌结果是针对旧版本 Skype 中的错误。
我有点好奇,因为这在 OpenSuse 12.x 中仍然被破坏。我本以为最初在 09 年左右报告的错误现在已经被修复了。我猜没有人真正使用 sprof。 (或者也许 dl-open 太脆弱以至于人们不敢碰它:-)
该问题归结为 __RTLD_SPROF 标志用作 dlopen 的参数。
采用任何调用 dlopen 的简单程序,或者将该标志设置为第二个参数,您都会得到相同的失败断言。我使用了底部的示例程序http://linux.die.net/man/3/dlopen http://linux.die.net/man/3/dlopen举个例子
handle = dlopen(argv[1], RTLD_LAZY | __RTLD_SPROF);
通过快速查看 dl-open.c,我可以看出,这个标志短路了 dl_open 的一些功能。因此断言中指定的 r_flag 不会设置为 RT_CONSISTENT。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)