状況によっては、-ipo を使用して実際のオブジェクト・ファイルを生成する必要があります。IPO を行う場合、擬似オブジェクト・ファイルではなく実際のオブジェクト・ファイルを強制的に生成するために、ipo_obj オプションと -ipo オプションを組み合わせて使用します。
次の場合は、-ipo_obj を使用する必要があります:
-ipo のコンパイル・フェーズで生成したオブジェクトが、xiar を使用せずにスタティック・ライブラリに置かれる場合。スタティック・ライブラリについてはマルチファイル IPO を利用できないため、スタティック・ライブラリはすべてリンカに渡されます。擬似オブジェクト・ファイルを含むスタティック・ライブラリにリンクするとリンケージ・エラーが発生します。-ipo_obj を指定すると、スタティック・ライブラリの中で使用できるオブジェクト・ファイルが生成されます。
一方、xiar を使用して作成したスタティック・ライブラリは、普通のライブラリとして機能します。
-ipo を指定したコンパイル・フェーズで生成したオブジェクトを、-ipo オプションと xiar を使用しないでリンクする場合。
-ipo を指定してコンパイルを行っている最中に、-S を用いてソースファイルごとにアセンブリ・リストを生成する場合。-ipo_obj ではなく -S と一緒に -ipo を使用すると、警告メッセージが出て、コンパイルしたソースファイルごとに空のアセンブリ・ファイルが生成されます。
IPO コンパイルは、コンパイル・フェーズとリンクフェーズの 2 つに分けて行われます。コンパイル・フェーズでは、コンパイラは中間言語 (IL) バージョンのコードを生成します。リンクフェーズでは、コンパイラは IL を読み込んでコンパイルを完了し、実際のオブジェクト・ファイルまたは実行ファイルを生成します。
一般に、コンパイラのバージョンが異なると、異なる定義に基づいて IL が生成されるため、IL は互換がない場合があります。インテル® Fortran コンパイラは各コンパイラの IL 定義に独自のバージョン番号を割り当てます。コンパイラがバージョン番号が異なるファイルの IL を読み込もうとすると、コンパイルは続行されますが、IL は破棄され、コンパイルでは使用されません。コンパイラはその後、互換性のない IL が検出され破棄されたという警告メッセージを出力します。
インテル® コンパイラが生成した IL は、.il という拡張子の付いたファイル名で ライブラリに保存されます。 このライブラリがライブラリに配置された IL を生成した同じコンパイラで起動されて IPO コンパイルに使用された場合、コンパイラはライブラリから .il を抽出してプログラムの最適化に使用することができます。例えば、ライブラリで定義されている関数を、ユーザのソースコードにインライン展開することができます。