gcc* との相互運用性

あるコンパイラで生成されたオブジェクト・ファイルやライブラリが別のコンパイラで生成されたオブジェクト・ファイルやライブラリとリンク可能で、生成される実行ファイルが正しく動作する場合、C++ コンパイラは相互運用可能です。インテル® C++ コンパイラ 8.0 は、GNU gcc* コンパイラとの相互運用性と互換性を大幅に改良しました。このセクションでは、新しい相互運用性オプションについて説明します。

互換性の詳細については、「gcc との互換性」を参照してください。

相互運用性のコンパイラ・オプション

インテル C++ コンパイラのオプションで gcc との相互運用性に影響するオプションは次のとおりです:

-cxxlib-gcc オプション

-cxxlib-gcc オプションは、gcc コンパイラに含まれている C++ ライブラリとヘッダファイルを使用してアプリケーションをビルドします。次のファイルをインクルードします:

-cxxlib-gcc オプションを使用してアプリケーションをコンパイルおよびリンクして生成された C++ オブジェクト・ファイル、ライブラリ、実行ファイルは、gcc 3.2 で生成された C++ オブジェクト・ファイル、ライブラリ、実行ファイルと相互運用可能です。これは、インテル・コンパイラ 8.0 で生成された C++ コードが gcc 3.2 でビルドされたサードパーティの C++ ライブラリとともに使用できることを意味します。

-cxxlib-gcc オプションは gcc 3.2 を含む Linux ディストリビューションでのみ使用することができます。これは C++ ABI 規格で必要です。

デフォルトでは、インテル C++ コンパイラは製品に含まれているライブラリとヘッダファイルを使用します。g++ でコンパイルされた (gnu C++ ヘッダに対してコンパイルされた) コードをリンクすると、ヘッダの違いにより互換性がなくなるため、実行時にエラーが発生する可能性があります。

インテル C++ ライブラリに対して 1 つの共有ライブラリをビルドし、gnu C++ ライブラリに対して 2 つ目の共有ライブラリをビルドし、1 つのアプリケーションで両方のライブラリを使用すると、2 つの C++ ランタイム・ライブラリを使用することになります。アプリケーションは両方のライブラリからシンボルを使用するため、次の問題が発生します:

インテル C++ コンパイラは 1 つのアプリケーションで複数のランタイム・ライブラリをサポートしません。

警告

複数のランタイム・ライブラリを使用してアプリケーションのコンパイルが正常に行われた場合でも、特に新しいコードが共有ライブラリに対してリンクされるとき、アプリケーションは非常に不安定になります。

アプリケーションが g++ で生成されたソースファイルとインテル C++ コンパイラで生成されたソースファイルを含む場合、-cxxlib-gcc オプションを使用するようにしてください。このオプションは、1 セットのランタイム・ライブラリでビルドするため、インテル・コンパイラに g++ ライブラリとヘッダファイルを使用するように指示します。この結果、プログラムは正常に動作するようになります。

-gcc-name オプション

-gcc-name=name-cxxlib-gcc とともに使用するオプションで、コンパイラが gcc C++ ライブラリを見つけられない場合に g++* の場所を指定します。標準の gcc インストールを行わなかった場合、このオプションを使用する必要があります。

-gcc-version

-gcc-version=nnn オプションは、コンパイラの動作を gcc バージョン nnn と互換にします。 このバージョンのインテル C++ コンパイラは -gcc-version=320 (デフォルト) をサポートします。

デフォルトのライブラリとヘッダ

-cxxlib-icc オプションは、インテル・コンパイラに含まれている C++ ライブラリとヘッダファイルを使用してアプリケーションをビルドします。次のファイルをインクルードします:

-cxxlib-icc オプションはデフォルトでオンで、すべてのサポートされている Linux ディストリビューションで使用することができます。リリースノートを参照してください。

対応するライブラリとヘッダの一覧

インテル・ライブラリ/ヘッダ gcc ライブラリ/ヘッダ
libcprts libstdc++
libcxa/libunwind libgcc

gcc 事前定義済みマクロ

インテル C++ コンパイラ 8.0 には、gcc でもサポートされている次の事前定義済みマクロが含まれています:

これらのマクロ定義が必要ない場合は、-no-gcc オプションを指定してください。gcc との相互運用性 (-cxxlib-gcc) が必要な場合、-no-gcc コンパイラ・オプションを使用しないでください。

「GNU 環境変数」も参照してください。