c - _dl_close 断言失败

标签 c apache debugging dlopen

我正在编写的 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 并开始快速刷新页面时,似乎会发生这个特殊的错误/段错误。

最佳答案

一些想法:

  1. 可能你调用 dlopen()不止一次? dl库维护引用计数器,该计数器在每个 dlopen() 时递增所以dlclose()仅当计数器 == 0 时才会卸载库。

  2. 您是否指定了 RTLD_NODELETE dlopen() 的标志(假设你在 Linux 上)?如果是,dlclose()不会卸载您的图书馆。

您是否尝试使用 strace 调试系统调用? ?启动 Apache,找到它的 pid 并通过调用 strace -p<pid> 跟踪 Apache 没有的所有系统调用。 .它可能会让您了解正在发生的事情。

关于c - _dl_close 断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367323/

相关文章:

linux - 使用 ssl 端口 35729 设置 xampp 和实时重新加载

php - 使用虚拟主机时如何设置apache的环境变量?

c - 使用 C 将逗号分隔的文本文件数据扫描到数组中

c - 多个符号定义和静态库

c - 是否可以将 C 指针初始化为 NULL?

c - Linux C : mount() fails with EPERM

c - 链表上的 map/reduce/filter... map 失败! (在 C 中)

apache - 使用命令行更改文档根目录

asp.net - 在VS2010中停止在IIS上调试Web应用程序需要很长时间

C++ bughunt - vector 中的高分插入会使程序崩溃