組み込みの powerpc で実行される g++ でコンパイルされたマルチスレッドの C++ アプリがあります。継続的インテグレーション テストでこれをメモリ リーク テストするために、 でロードされるヒープ アナライザーを作成しましたld_preload
。
ld_preloaded
モジュール内の関数が他の何かが発生する前に呼び出されることを保証したいと思います (静的オブジェクトの作成などを含む...)。さらに重要なことは、プロセスが終了する直前に呼び出される別の関数を用意して、ヒープ アナライザーがその結果を出力できるようにすることです。ld_preloaded
私たちが見ている問題は、モジュールで何かが起こる前に、アプリケーションのベクトルがグローバル ファイル スコープで作成されていることです。ベクトルはメイン内でサイズが大きくなります。シャットダウン時destructor
に、ベクターが破棄される前に、プリロードされたモジュールの関数が呼び出されます。
プリロードされたモジュールをコーディングして、他の何よりも前に、他のすべての後に関数を実行する方法はありますか? __attribute__((constructor))
andを使用してみましたが、destructor
成功しませんでした。
質問のタイトルに戻ると、ld
後続のモジュール ロードのシンボルを解決するときに、プリロードされたモジュールのみを検索するのではないかと疑い始めています。実際には、プリロードされたモジュールを最初にロードしません。誰かが私たちのためにこれに光を当てることができますか?