appcert ユーティリティーがアプリケーションのオブジェクトファイルを解析した結果は、appcert ユーティリティーの作業用ディレクトリ (通常は /tmp) にあるいくつかのファイルに書き込まれます。作業用ディレクトリの下にあるメインサブディレクトリは appcert.pid です。このとき、pid は appcert の当該インスタンスのプロセス ID です。appcert ユーティリティーの結果は、次のファイルに書き込まれます。
確認されたバイナリ間のマッピングと、当該バイナリに固有な appcert の出力が格納されているサブディレクトリ名が書き込まれる
appcert を実行したときに stdout に出力されたレポートのコピーが書き込まれる
appcert が確認しようとしたが強制的にスキップされたバイナリの一覧と、各バイナリがスキップされた理由が書き込まれる。スキップされる理由には次のようなものが挙げられる
ファイルがバイナリオブジェクトではない
当該ユーザーではファイルを読み取ることができない
ファイル名にメタキャラクタが含まれている
ファイルの実行ビットが設定されていない
objects サブディレクトリの下には、appcert が確認するオブジェクトごとのサブディレクトリが作成される。サブディレクトリごとに、次のようなファイルが格納される
Solaris 降格シンボルであると appcert が疑っているシンボルの一覧
オブジェクトが直接バインドされている Solaris 非公開シンボルの一覧
オブジェクトが直接バインドされている Solaris 公開シンボルの一覧
ldd -r を実行したときに、動的リンカーによってバインドされなかったシンボルの一覧。ldd が返す行には、「file not found 」も含まれる
appcert が調査したオブジェクト内にある動的バインドの要約がプリンタ形式で書き込まれる (各 Solaris ライブラリから使用される公開シンボルと非公開シンボルのテーブルも含まれる)
appcert は終了するときに、次の 4 つのうちの 1 つを返します。
appcert はバイナリ安定性問題の潜在的な原因を見つけなかった。
appcert は正常に実行されなかった。
appcert が確認した一部のオブジェクトにバイナリ安定性問題が見つかった。
appcert が確認すべきバイナリオブジェクトが見つからなかった。
非公開シンボルの使用 – 開発したときの Solaris リリースとは異なる Solaris リリース上で実行しようとすると、非公開シンボルに依存するアプリケーションは動作しない可能性があります。これは、非公開シンボルは Solaris リリース間で変更または削除される可能性があるためです。アプリケーション内で非公開シンボルが使用されていることを appcert が報告した場合は、非公開シンボルを使用しないようにアプリケーションを再作成してください。
降格シンボル – 降格シンボルとは、あとの Solaris リリースにおいて削除された、あるいは、有効範囲がローカルに制限された Solaris ライブラリの関数またはデータ変数のことです。このようなシンボルを直接呼び出すアプリケーションは、ライブラリが当該シンボルをエクスポートしないリリース上では動作できません。
非結合シンボル – 非結合シンボルとは、アプリケーションが参照するライブラリシンボルのうち、appcert によって呼び出されたときに動的リンカーが解決できなかったライブラリシンボルのことです。非結合シンボルは必ずしも常にバイナリ安定性が低いことを示す指標ではありませんが、降格シンボルへの依存関係など、より深刻な問題が発生していることを示す場合もあります。
廃止ライブラリ – 廃止ライブラリとは、将来のリリースで Solaris オペレーティング環境から削除される可能性があるライブラリのことです。appcert ユーティリティーは廃止ライブラリのすべての使用に対して警告を発します。廃止ライブラリに依存するアプリケーションは、将来のリリースでサポートされなくなり、機能しなくなる可能性があります。廃止ライブラリのインタフェースを使用しないでください。
sys_errlist または sys_nerr の使用 – sys_errlist シンボルおよび sys_nerr シンボルを使用すると、バイナリ安定性が低下することがあります。これは、sys_errlist 配列の終わりを越えた参照が行われる可能性があるためです。代わりに strerror を使用してください。
強いシンボルと弱いシンボルの使用 – 将来の Solaris リリースで動作が変更される可能性があるので、弱いシンボルに関連付けられた強いシンボルは非公開シンボルとして予約されます。アプリケーションは弱いシンボルに直接参照する必要があります。強いシンボルの例としては、弱いシンボル socket に関連付けられた _socket があります。