インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、Linux* および macOS* にのみ適用されます。
インテル® C++ コンパイラーは、GNU* コンパイラー・コレクション (gcc) のほとんどのバージョンと互換性があります。リリースノートに互換バージョンの一覧があります。
インテル® C++ コンパイラーで作成された C 言語オブジェクト・ファイルは、gcc および C/C++ 言語ライブラリーとバイナリー互換です。インテル® C++ コンパイラーまたは gcc* コンパイラーを使用して、オブジェクト・ファイルをリンカーに渡すことができます。インテル® C++ コンパイラーにより生成された IPO 擬似オブジェクト・ファイルまたは IPO 擬似オブジェクト・ファイルのライブラリーをリンカーに渡すには、インテル® C++ コンパイラーで提供されるリンクツールを使用します。
icc、icpc、ifort、xild、および xiar を利用できます。
Clang ベースのフロントエンドのインテル® C++ コンパイラーを含むインテル® ソフトウェア製品では、icl または icl++ も利用できます。
-ffat-lto-objects コンパイラー・オプションによるリンク時の最適化は gcc との互換性のために提供されています。これは、オブジェクト・ファイルのリンクとアーカイブに ld と ar を使用できることを意味しますが、これらを使用するとファイル間の最適化は行われません。-fno-fat-lto-objects コンパイラー・オプションは、IPO 擬似オブジェクト・ファイルを xild でリンクし、xiar でアーカイブする場合に使用できます。
インテル® C++ コンパイラーは GNU* コンパイラーが提供する多くの言語拡張をサポートしています。詳細は、http://www.gnu.org/home.ja.html を参照してください。
式文内に次の項目を置くことが禁止されていることを除き、式文はサポートされています。
動的に初期化されたローカル静的変数
ローカルの非 POD クラス定義
try/catch
可変長配列
インテル® C++ コンパイラーは、アセンブラー・コードが AT&T* System V/386 構文を使用する場合、gcc スタイルのインライン・アセンブリーをサポートします。
あるコンパイラーで生成されたオブジェクト・ファイルやライブラリーが別のコンパイラーで生成されたオブジェクト・ファイルやライブラリーとリンク可能で、生成される実行ファイルが正しく動作する場合、C++ コンパイラーは互換性を保持することができます。インテル® C++ コンパイラーは、GNU* コンパイラーと互換性があります。
インテル® C++ コンパイラーと GNU* gcc コンパイラーは、次の事前定義済みマクロをサポートします。
__GNUC__
__GNUG__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
これらのマクロを定義しないようにするには、-no-gcc オプションを指定します。gcc との互換性保持 (-cxxlib) が必要な場合、-no-gcc オプションを使用しないでください。
これらのマクロを定義しないと、システム・ヘッダー・ファイルのパスが使用されます。このような代替パスは、十分にテストされていないか、または互換性がないことがあります。
インテル® コンパイラーは、システム上の GNU* ヘッダーファイル (stdio.h を含む)、GNU* リンカーとライブラリーなどの GNU* ツールを使用します。そのため、システム上の gcc /g++ バージョンと互換性がなければなりません。例えば、システムに gcc 4.6 がインストールされている場合、icc は互換性のある機能と動作で gcc 4.6 と同様に振る舞います。
デフォルトでは、コンパイラーは、PATH 環境変数を基にインストールされている gcc/g++ バージョンを特定します。
システムのデフォルトの gcc/g++ バージョン以外を使用する場合は、-gcc-name または -gxx-name コンパイラー・オプションで使用する gcc/g++ バージョンを指定する必要があります。次に例を示します。
システムのデフォルトバージョンではコンパイルできず、互換性のためレガシーバージョンを使用しなければならない場合。例えば、システムのデフォルトバージョンと互換性のないサードパーティーのライブラリーを使用する場合。
システムのデフォルトの gcc/g++ よりも新しいバージョンを使用する場合。
インテル® コンパイラーのドライバーは、gcc/g++ のデフォルトバージョンまたは指定したバージョンを使用して、ヘッダーとライブラリーの場所を特定します。
cxxlib オプションは GNU* C++ ライブラリーのリンクに関するもので、-gcc-name や -gxx-name とは直接関係ありません。
-cxxlib-nostd は、コンパイラーが C++ システム include ディレクトリーで C++ 標準ライブラリー libstdc++ を検索しないようにします。例えば、-cxxlib-nostd を指定すると、#include <iostream> はコンパイルせず、#include <stdio.h> はコンパイルします。また、このオプションを指定すると、ドライバーは -lstdc++ オプションを省くため、libstdc++ はリンクされません。
-no-cxxlib は、libstdc++ だけでなく、すべての C++ ライブラリーのリンクに影響します。例えば、printf のみを使用するプログラムは、-no-cxxlib を指定した場合はリンクされませんが、-cxxlib-nostd を指定した場合はリンクされます。
-cxxlib=dir は、バイナリーとライブラリーのトップレベルの場所を変更します。例えば、icc -gxx-name=/my/directory/g++ -cxxlib=/cxxlib/dir を指定すると、ドライバーは /cxxlib/dir/my/directory で g++ を探します。
インテル® C++ コンパイラーでは、次のオープンソース・ツールのサポートが強化されています。
GNU* Libtool - パッケージ開発者に汎用共有ライブラリーのサポートを提供するスクリプトです。
Valgrind - x86 系プロセッサー上で、実行ファイルのデバッグとプロファイルを行うための柔軟なシステムです。
GNU* Automake - makefile.am というファイルから自動で makefile.ins を作成するツールです。