監査ライブラリはほかの共有オブジェクトと同様に構築されます。ただし、プロセス内の監査ライブラリに固有の名前空間には、いくつかの注意が必要です。
ライブラリは、すべての依存関係の要件を提供しなければならない。
ライブラリは、プロセス内のインタフェースに複数のインスタンスを提供しないシステムインタフェースを使用できない。
監査ライブラリが外部インタフェースを参照している場合、監査ライブラリではインタフェースを定義する依存関係を定義する必要があります。たとえば、監査ライブラリが printf(3C) を呼び出す場合、監査ライブラリは libc への依存関係を定義する必要があります。共有オブジェクト出力ファイルの生成を参照監査ライブラリには、固有の名前空間があるため、監査中のアプリケーションに存在する libc によってシンボル参照を満たすことはできません。監査ライブラリに libc への依存関係がある場合は、2 つのバージョンの libc.so.1 がプロセスに読み込まれます。1 つはアプリケーションのリンクマップリストの結合要件を満たし、もう 1 つは監査リンクマップリストの結合要件を満たします。
すべての依存関係が記録された状態で監査ライブラリが構築されるようにするには、リンカーの –z defs オプションを使用します。
システムインタフェースの中には、自らがプロセス内部の実装の唯一のインスタンスであると想定しているものがあります。このような実装の例として、シグナルおよび malloc(3C) があります。このようなインタフェースを使用すると、アプリケーションの動作が不正に変更されるおそれがあるため、監査ライブラリでは、このようなインタフェースの使用を避ける必要があります。