インテル コンパイラー 1000本ノックプロジェクト 2ページ

インテル コンパイラーのコマンドラインツール

 makeやビルドスクリプトを利用してコンパイルを行う場合に押さえておきたいのが、インテル コンパイラーに含まれるコマンドラインツールとその名称だ(表1、2)。インテル コンパイラーにはコマンドラインツールとしてC/C++コンパイラと専用のリンカー、ライブラリ/アーカイブ管理ツール(アーカイバ)が含まれている。たとえばWindows版のC/C++コンパイラは「icl.exe」、Linux/Mac OS X版のC/C++コンパイラは「icc」という名称となる。

表1 インテル コンパイラーに含まれるコマンドラインツール(Windows版)
ツール Windows版コマンド名 対応するVisual C++付属ツール
C/C++コンパイラ icl.exe cl.exe
リンカー xlink.exe link.exe
ライブラリ/アーカイブ管理ツール(アーカイバ) xilib.exe lib.exe
表2 インテル コンパイラーに含まれるコマンドラインツール(Linux/Mac OS X版)
ツール Linux/Mac OS X版コマンド名 対応するbinutilsツール
Cコンパイラ icc gcc
C++コンパイラ icpc g++
リンカー xild ld
ライブラリ/アーカイブ管理ツール(アーカイバ) xiar ar

 また、インテル コンパイラーでプロシージャ間の最適化機能を有効にしてコンパイルしたオブジェクトファイル(「/Qipo」もしくは「-ipo」オプションを付けてコンパイルしたオブジェクトファイル)は、Visual C++やGNU binutilsに含まれるリンカーやライブラリ/アーカイブ管理ツールでは扱えない。これらのオブジェクトファイルをリンクしたり、ライブラリ化する場合は、インテル コンパイラーに付属するxlink.exeやxild、xilib.exe、xiarといったツールを用いる必要がある。

 makeやビルドスクリプトを用いてプログラムをコンパイルする場合は、これらのツールを使用するようMakefileやスクリプト、環境変数などを変更すれば良い。たとえばLinux環境でconfigureスクリプトを使ってコンパイルする場合は、次のようにCCおよびCXX、LD、ARという環境変数を指定してconfigureを実行すれば良い。

./configure CC=icc CXX=icpc LD=xild AR=xiar

Visual C++/GCCと微妙に異なる言語仕様

 インテル コンパイラーはVisual C++やGCCとの互換性があるものの、微妙に仕様が異なる点もある。互換性に関する情報は、インテル コンパイラーのオンラインヘルプ内「Microsoftとの互換性」および「gccとの互換性」ページに詳細が掲載されているが、インテル コンパイラーではVisual C++およびGCC独自の言語拡張やキーワードの一部をサポートしていないほか、標準ではより厳密な型チェックなどが行われる。そのため、Visual C++やGCCで問題なくコンパイルできるソースコードであっても、インテル コンパイラーでコンパイルするとエラーや警告(Warnings)が発生する場合がある。このような場合、インテル コンパイラーに用意されている互換性保持のためのコンパイルオプションを使用することで問題を解決できることがある。

 Windows版インテル コンパイラーには、「/Qms0」および「/Qms1」、「/Qms2」という「Microsoft互換性オプション」が用意されている(表3)。これらはC/C++標準規格に沿っていないVisual C++の挙動やバグ等をエミュレートするものだ。また、Visual Studio .NET 2003/2005/2008との互換性を保つためのオプションも用意されている。

表3 Windows版インテル コンパイラーの互換性オプション
オプション 意味
/Qms0 C/C++標準規格に準拠する範囲内でVisual C++をエミュレートする
/Qms1 /Qms0より多くのバグ/仕様をエミュレートする
/Qms2 Visual C++の仕様を最大限エミュレートする
/Qvc7.1 Microsoft Visual Studio .NET 2003との互換性を保つ
/Qvc8 Microsoft Visual Studio .2005との互換性を保つ
/Qvc9 Microsoft Visual Studio .2008との互換性を保つ

 また、Linux/Mac OS X版インテル コンパイラーでは、コンパイラの動作をGCCの特定バージョン互換にするオプションが用意されている(表4)。さらに、Linux/Mac OS X版インテル コンパイラーは独自のC++ライブラリを使用するが、「-cxxlib」オプションを指定することで、GCCに含まれているC++ライブラリやヘッダーファイルを使用してコンパイルを行うことが可能だ。

表4 Linux/Mac OS X版インテル コンパイラーの互換性オプション(抜粋)
オプション 意味
-gcc-version=<バージョン> 指定したGCCバージョンとの互換性を保つ
-cxxlib GCCに含まれるC++ライブラリおよびヘッダーファイルを使用する