Sun Studio 12: C++ ユーザーズガイド

2.3 バージョンが異なるコンパイラでのコンパイル

C++ 5.1 以降のコンパイラは、テンプレートキャッシュディレクトリにテンプレートキャッシュのバージョンを示す文字列を付けます。

このコンパイラは、デフォルト時にはキャッシュを使用しません。キャッシュを使用するのは、-instances=extern が指定されているときだけです。キャッシュを使用する場合、コンパイラはキャッシュディレクトリのバージョンを調べ、その結果キャッシュバージョンに問題があることがわかると、エラーメッセージを出力します。将来の C++ コンパイラもキャッシュのバージョンを調べます。たとえば、将来のコンパイラは異なるテンプレートキャッシュのバージョン識別子を持っているため、現在のリリースで作成されたキャッシュディレクトリを処理しようとすると、次のようなエラーを出力します。


SunWS_cache: エラー: /SunWS_cache のテンプレートデータベースは、
このコンパイラと互換性がありません。

同様に、現在のリリースのコンパイラで以降のバージョンのコンパイラで作成されたキャッシュディレクトリを処理しようとすると、エラーが発行されます。

C++ コンパイラ 5.0 で作成されたテンプレートキャッシュディレクトリにはバージョン識別子が付けられていません。しかし、現在のリリースのコンパイラは、5.0 のキャッシュディレクトリをエラーや警告なしに処理できます。これは、C++ コンパイラが 5.0 のキャッシュディレクトリを、使用できるディレクトリ形式に変換するためです。

C++ 5.0 コンパイラは、5.0 より新しいリリースのコンパイラが作成したキャッシュディレクトリを使用できません。C++ コンパイラ 5.0 は形式の違いを認識できず、C++ コンパイラ 5.1 (または、これ以降のリリース) で作成されたキャッシュディレクトリを処理しようとすると、エラーを発行します。

コンパイラをアップグレードする際には、必ずキャッシュを消去するようにするとよいでしょう。テンプレートキャッシュディレクトリ (ほとんどの場合、テンプレートキャッシュディレクトリの名前は SunWS_cache) が入っているディレクトリすべてに対し、CCadmin -clean を実行します。CCadmin -clean の代わりに、rm -rf SunWS_cache と指定しても同様の結果が得られます。