当前位置:  开发笔记 > 运维 > 正文

_dl_close断言失败

如何解决《_dl_close断言失败》经验,为你挑选了1个好方法。

我在我正在编写的Apache模块中使用dlopen(),这样我就可以为我的模块安装一个插件系统.我发现,如果我编译我的模块,编译我的插件,并启动Apache,一切都工作很好.

但是,如果在完成所有这些操作之后,我重新编译了我的插件,(对插件代码进行了一些或两次更改),我的下一页加载将导致Apache出现段错误.每个后续请求再次正常工作.因此,只有在编译后立即加载第一页导致段错误.

我一直试图解决这个问题几天(我在C调试方面表现不佳)今天,我在apache错误日志中注意到了这一点:

Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!

任何人都知道发生了什么事吗?这是否意味着它不是我的代码而且我一直在寻找幻影错误?我相信每次调用dlopen()都会调用dlcose().但是,当我在单进程模式下运行apache并开始快速刷新页面时,似乎会发生这种特殊的bug/segfault.



1> qrdl..:

一些想法:

    可能你再打电话dlopen()一次?dl库维护其递增每个引用计数器dlopen(),以便dlclose()将卸载库只如果计数器== 0.

    你有没有指定RTLD_NODELETE标志dlopen()(假设你在Linux上)?如果是,dlclose()则不会卸载您的库.

您是否尝试使用调试系统调用strace?启动Apache,找到它的pid并通过调用跟踪Apache没有的所有系统调用strace -p.可能它会让你知道发生了什么.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有