私が書いている Apache モジュールで dlopen() を使用しているので、モジュールのプラグイン システムを使用できます。モジュールをコンパイルし、プラグインをコンパイルし、Apache を起動すると、すべてがうまく機能することがわかりました。
ただし、すべての作業を行った後でプラグインを再コンパイルすると (プラグイン コードに小さな変更を 1 つか 2 つ加えると)、次のページの読み込みで Apache にセグメンテーション違反が発生します。後続の各リクエストは、再び正常に機能します。したがって、segfault の原因となるのは、コンパイル直後の最初のページの読み込みだけです。
私は数日間これに取り組もうとしてきました (私は C のデバッグが得意ではありません)、そして今日、Apache エラー ログでこれに気付きました:
Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
誰が何が起こっているのか知っていますか?これは私のコードではなく、幻のバグを探しているということですか? 私は、dlopen() を呼び出すたびに dlcose() を呼び出していると確信しています。ただし、この特定のバグ/セグメンテーション違反は、apache をシングル プロセス モードで実行し、ページの更新をすばやく開始すると発生するようです。