状況によっては、-ipo を使用して実際のオブジェクト・ファイルを生成する必要があります。IPO を行う場合、擬似オブジェクト・ファイルではなく実際のオブジェクト・ファイルを強制的に生成するために、-ipo_obj オプションと -ipo オプションを組み合わせて使用します。
次の場合は、-ipo_obj を使用する必要があります:
IPO コンパイルは、コンパイル・フェーズとリンクフェーズの 2 つに分けて行われます。コンパイル・フェーズでは、コンパイラは中間言語 (IL) バージョンのコードを生成します。リンクフェーズでは、コンパイラは IL を読み込んでコンパイルを完了し、実際のオブジェクト・ファイルまたは実行ファイルを生成します。
一般に、コンパイラのバージョンが異なると、異なる定義に基づいて IL が生成されるため、異なるコンパイルによる IL は互換がない場合があります。インテル® C++ コンパイラは各コンパイラの IL 定義に独自のバージョン番号を割り当てます。コンパイラがバージョン番号が異なるファイルの IL を読み込もうとすると、コンパイルは続行されますが、IL は破棄され、コンパイルでは使用されません。その際、コンパイラは、検出および破棄された非互換の IL に関する警告メッセージを表示します。
インテル・コンパイラが生成した IL は、.il 拡張子が付いたファイルに格納されます。その後、.il ファイルはライブラリに配置されます。このライブラリが、その IL を生成したものと同じコンパイラで起動されて IPO コンパイルに使用された場合、コンパイラはライブラリから .il ファイルを抽出してプログラムの最適化に使用することができます。例えば、ライブラリで定義された関数をソースコードにインライン展開することができます。