appcert
の結果
appcert
ユーティリティによる、アプリケーションのオブジェクトファイルに対する分析結果は、appcert
ユーティリティの作業用ディレクトリ (通常は /tmp) に作成されるサブディレクトリの下に置かれるいくつかのファイルに書き込まれます。作業用ディレクトリに作成されるサブディレクトリ名は appcert
.pid で、pid は appcert
のプロセス ID です。
チェック済みのバイナリと、そのバイナリに対する appcert
の出力が置かれるサブディレクトリとの間の対応が入ります。
appcert
の実行時に stdout に表示された、終了報告のコピーが保存されます。
appcert
がチェックするように要求されたが処理を飛ばさざるを得なかったバイナリのリストが入ります。各バイナリが処理を飛ばされた理由も記載されます。理由には、次のものがあります。
ファイルがバイナリのオブジェクトでない
ファイルをユーザーが読み取ることができない
ファイル名にメタキャラクタが含まれている
ファイルに実行ビットが設定されていない
objects のサブディレクトリの下には、appcert
が検査したオブジェクトごとにサブディレクトリが作られます。それぞれのサブディレクトリには、次のファイルが入っています。
check.demoted.symbols | ||
降格された Solaris シンボルの可能性があると |
||
check.dynamic.private | ||
オブジェクトが直接結合されている、非公開 Solaris シンボルのリストが入っています。 |
||
check.dynamic.public | ||
オブジェクトが直接結合されている、公開 (public) Solaris シンボルのリストが入っています。 |
||
check.dynamic.unbound | ||
ldd -r の実行時に、動的リンカーで結合されなかったシンボルのリストが入っています。ldd によって返された file not found と記載された行も含まれます。 |
||
summary.dynamic | ||
|
appcert
の終了時には、次の 4 つの値のうちの 1 つが返されます。
バイナリが不安定となり得る要因は appcert
では見つかりませんでした。
appcert
ユーティリティは正常に実行されませんでした。
appcert
がチェックしたオブジェクトの一部に、バイナリの安定性に問題がある可能性があります。
appcert
ユーティリティはチェックするバイナリオブジェクトを見つけることができませんでした。
appcert
が報告した問題に対する対処方法
非公開シンボルの使用。 Solaris のリリースごとに、非公開シンボルの動作が変わっていたり、非公開シンボルがなくなっている場合があるため、非公開シンボルに依存するアプリケーションは、開発された Solaris リリースとは異なるリリース上では実行できない可能性があります。appcert
によって、アプリケーションで非公開シンボルが使用されていると報告された場合は、非公開シンボルを使用しないでアプリケーションを書き直す必要があります。
降格されたシンボル。 降格されたシンボルとは、後の Solaris リリースで削除された、または有効範囲が局所的 (ローカル) となる Solaris ライブラリの関数やデータ変数を指します。そうしたシンボルを直接呼び出すアプリケーションは、ライブラリがそのシンボルを外部参照可能としないリリースでは実行できなくなります。
結合されていないシンボル。 結合されていないシンボルは、appcert
によって呼び出されたときに動的リンカーが解決できなかったアプリケーションによって参照されるライブラリシンボルを指します。結合されていないシンボルは、必ずしもバイナリの安定性が低いことを示すものではありませんが、降格されたシンボルに対する依存関係のような、重大な問題を示している可能性があります。
旧式のライブラリ。 旧式のライブラリは将来のリリースで Solaris から削除される可能性があります。appcert
ユーティリティはそうしたライブラリが使用されていると注意を喚起します。今後のリリースでそのライブラリがなくなると、それに依存するアプリケーションが動作しなくなるからです。こうした問題を避けるため、旧式のライブラリのインタフェースは使用しないでください。
sys_errlist または sys_nerr の使用。 sys_errlist シンボルおよび sys_nerr シンボルの使用は、sys_errlist 配列の終端より後に対して参照が行われる場合があるため、バイナリの安定性を低下させる可能性があります。こうした危険を回避するため、代わりに strerror を使用してください。
強いシンボルや弱いシンボルの使用。 今後の Solaris のリリースでは動作が変わる可能性があるため、弱いシンボルと関連付けられている強いシンボルは、非公開として予約されています。アプリケーションは、弱いシンボルを直接的にのみ参照しなければなりません。強いシンボルの例に _socket がありますが、これは弱いシンボル socketと関連付けられています。