インテル® C++ コンパイラー 10.0 Linux* 版
リリースノート

目次

概要

インテル® C++ コンパイラー 10.0 Linux 版は、IA-32、インテル® 64、および IA-64 アーキテクチャー・ベースのプロセッサー上できわめて高速に動作する C/C++ アプリケーションを生成します。インテル® Pentium® 4 プロセッサーとインテル® Pentium® M プロセッサーのインテル® ストリーミング SIMD 拡張命令 2 (SSE2)、インテル® Pentium® 4 プロセッサーとインテル® ストリーミング SIMD 拡張命令 3 (SSE3) 対応のインテル® Core™ プロセッサーの SSE3 の最適化を行います。プロシージャー間の最適化 (IPO) やプロファイルに基づく最適化 (PGO) によってアプリケーションのパフォーマンスを大きく向上させます。また、OpenMP* に対応し、自動並列化機能も備えるなど、マルチスレッド・コードの開発もサポートしています。

インテル® ソフトウェア開発製品の詳しい情報については、http://www.intel.co.jp/jp/software/products/ を参照してください。

製品の内容

この製品には 2 つのエディションがあります。

スタンダード・エディションには、以下のコンポーネントが含まれます。

プロフェッショナル・エディションには、スタンダード・エディションのすべてのコンポーネントに加えて、以下のコンポーネントが含まれます。

プロフェッショナル・エディションの追加コンポーネントは、個別にインストールされ、それぞれリリースノートが含まれています。

注: インテル® C++ コンパイラーのデフォルトのインストール・パスは、/opt/intel/cc/10.0.xxx です。ここで、xxx は 3 桁のビルド番号です。このドキュメントでは、デフォルトのインストール・パスを <install-dir> として表記しています。

テクニカルサポートを受けたり、製品のアップデート・モジュールを入手するには、製品を登録する必要があります。製品の登録方法は、この後にある「テクニカルサポート」セクションを参照してください。

Eclipse 統合開発環境 (IA-32 および IA-64 システムのみ)

インテル® C++ コンパイラー Linux 版には、Eclipse 3.2.x への統合と C/C++ Development Tools (CDT) 3.1.x が含まれています。

Eclipse は、オープンソースのソフトウェア開発環境プロジェクトで、高度に統合されたツールを開発するための、強力でフル機能を備えた、商用品質の標準プラットフォームを提供することを目的としています。Eclipse は、拡張可能なオープンソースの統合開発環境 (IDE) です。

CDT (C/C++ Development Tools) プロジェクトは、Eclipse のサブプロジェクトで、Eclipse プラットフォーム用のフル機能を備えた C/C++ IDE を提供することを目的としています。CDT は、Eclipse プラットフォーム用の、C/C++ 開発用プラグインのセットです。

インテル® C++ コンパイラーを Eclipse/CDT IDE と統合することで、ビジュアルでインタラクティブな環境でインテル® C++ プロジェクトを開発、ビルド、実行できます。

リンク

バージョン 10.0 の新機能

このセクションでは、インテル® C++ コンパイラー 10.0 の新機能および変更点について説明します。インテル® デバッガーのリリースノートも参照してください。

変更および追加されたコマンドライン・オプション

以下に、バージョン 9.1 の最初のリリースから変更または追加されたコマンドライン・オプションをリストします。これらのオプションの詳細な情報は、コンパイラーのドキュメントを参照してください。

-alias-const[-]
入力/出力バッファー規則を、ポインター型の引数を持つ関数に適用するかどうかを指定します。(デフォルト: オフ)
-axS
IA-32 汎用コードと将来のインテル® プロセッサーでサポートされる、SSE4 ベクトル化コンパイラー命令およびメディア・アクセラレーター命令を生成します。(IA-32 およびインテル® 64 対応システムのみ。デフォルト: オフ)
-[no-]check-uninit
初期化されていない変数のランタイムチェックを行うかどうかを決定します。(デフォルト: オフ)
-cxxlib-nostd
コンパイラーが標準 C++ ライブラリーにリンクしないようにします。(デフォルト: オフ)
-diag-<type> <diag-list>
診断情報の表示を制御します。(デフォルト: オフ)
-diag-dump
有効なすべての診断メッセージを出力して、コンパイルを停止するようコンパイラーに指示します。(デフォルト: オフ)
-diag-enable sv[1|2|3]
スタティックの検証を有効にします。(デフォルト: オフ)
-diag-enable sv-include
スタティックの検証でインクルード・ファイルも解析対象とします。
-[no-]diag-id-numbers
メッセージ ID を使用して、診断メッセージを表示するようコンパイラーに指示します。(デフォルト: オン)
-fargument-noalias-global
引数がほかの引数やグローバル・ストレージとエイリアスしないように指示します。(デフォルト: オフ)
-fast
パフォーマンスを向上させるオプションのセットを有効にします。本リリースでは、オプションが変更されています。下記の説明を参照してください。
-f[no-]exceptions
例外処理テーブルの生成を有効にします。(デフォルト: C++ の場合はオン、C の場合はオフ)
-f[no-]instrument-functions
関数のエントリーポイントと終了ポイントをインストルメントするかどうかを指定します。(デフォルト: オフ)
-f[no]-keep-static-consts
ソースで参照されない変数の割り当てを保持するようコンパイラーに指示します。(デフォルト: オフ)
-fmudflap
バッファー・オーバーフローおよびヒープの不正使用を防ぐために、危険なポインター操作をインストルメントするようにコンパイラーに指示します。(デフォルト: オフ)
-fp-speculation=<mode>
浮動小数点演算のスペキュレーションを行うモードをコンパイラーに指示します。(デフォルト: fast)
-[no-]func-groups
プロファイリング情報が有効な場合は、関数のグループ化を有効または無効にします。(IA-32 およびインテル® 64 対応システムのみ。デフォルト: オフ)
-gcc-sys
システムヘッダーのコンパイル時のみ GNU マクロを定義します。(デフォルト: オフ)
-help [category]
利用可能なすべてのコンパイラー・オプションまたはコンパイラー・オプションのカテゴリーを表示します。(デフォルト: オフ)
-ipo-jobs<n>
プロシージャー間の最適化 (IPO) のリンクフェーズで、同時に実行するコマンド (ジョブ) の数を指定します。
-nostdinc++
コンパイラーが C++ 標準ディレクトリー内のヘッダーファイルではなく、ほかの標準ディレクトリーを検索するようにします。(デフォルト: オフ)
-[no-]opt-class-analysis
C++ クラス階層情報を使用して、コンパイル時に C++ 仮想関数の呼び出しを解析し解決するようコンパイラーに指示します。(デフォルト: オフ)
-par-schedule-<keyword>[[]n]
DO ループのスケジューリング・アルゴリズムを指定します。
-[no-]prefetch
プリフェッチ挿入による最適化を有効または無効にします。このオプションは、-O3 が指定されている場合のみ有効です。本リリースでは、-xT が指定されている場合は、IA-64 システム上に加えて IA-32 システム上でも有効です。(IA-32 および IA-64 システムのみ。デフォルト: オフ)
-save-temps[-]
コンパイル時に作成される中間ファイルを保存するようコンパイラーに指示します。(デフォルト: オフ)
-shared-intel
インテルが提供するライブラリーをすべて動的にリンクします。(デフォルト: libguide を除くすべてのライブラリーを静的にリンク)
-shared-libgcc
GNU libgcc ライブラリーを動的にリンクします。(デフォルト: オフ)
-static-intel
インテルが提供するライブラリーをすべて静的にリンクします。(デフォルト: libguide を除くすべてのライブラリーを静的にリンク)
-static-libgcc
GNU libgcc ライブラリーを静的にリンクします。(デフォルト: オフ)
-tcheck [<mode>]
OpenMP マルチスレッド・アプリケーションの解析方法を指定します。(デフォルト: オフ)
-tcollect
インテル® トレースコレクター API の呼び出しを検証するインストルメンテーションを挿入します。(デフォルト: オフ)
-trigraphs
ISO C trigraphs をサポートします。ANSI モードおよび C99 モードでもサポートします。(デフォルト: オフ)
-Weffc++
特定の C++ プログラミング・ガイドラインに基づく警告を有効にします。(デフォルト: オフ)
-W[no-]missing-declarations
あらかじめ定義されていないグローバル関数およびグローバル変数の警告を有効にします。(デフォルト: オフ)
-Wnon-virtual-dtor
非仮想クラスとして宣言されているにもかかわらず、ポリモアフィックのようにみえるクラスの警告を発行します。(デフォルト: オフ)
-Wreorder
メンバー初期化子の順序がメンバーの実行順序と異なる場合に警告を発行します。(デフォルト: オフ)
-W[no-]strict-prototypes
引数の型を指定しない関数の宣言と定義に対する警告を有効にします。(デフォルト: オフ)
-Wunused-variable
引数の型を指定しない関数の宣言と定義に対する警告を有効にします。(デフォルト: オフ)
-xO
SSE3、SSE2、および SSE 命令を生成し、インテル® Pentium® 4 プロセッサーおよび SSE3 対応のインテル® Xeon® プロセッサー向けに最適化します。生成されるコードは、SSE3、SSE2、および SSE 命令セットに対応したインテル以外から提供されているプロセッサーでも動作することがあります。この値は、processor 値が S、T、および P の場合に有効となる一部の最適化を有効にしません。(IA-32 およびインテル® 64 対応システムのみ。デフォルト: オフ)
-xS
将来のインテル® プロセッサーでサポートされる、SSE4 ベクトル化コンパイラー命令およびメディア・アクセラレーター命令を生成します。また、SSSE3、SSE3、SSE2、および SSE 命令も生成します。将来のインテル® プロセッサー向けに最適化します。(IA-32 およびインテル® 64 対応システムのみ。デフォルト: オフ)

推奨されていない (古い) コマンドライン・オプションおよび削除されたコマンドライン・オプション

推奨されていない (現在はサポートされているが、将来のバージョンでは削除される予定の) コマンドライン・オプション、または削除された (サポートが終了した) コマンドライン・オプションの詳細は、ドキュメントの「コンパイラー・オプション」 > 「推奨されていないコンパイラー・オプション (古いオプション) と削除されたコンパイラー・オプション」を参照してください。

代替コマンドライン・オプション

多くのコマンドライン・オプションでは、オプション名でハイフン ("-") の代わりに、古い記述方法の下線 ("_") を使用しています。この古い記述方法は、まだ有効です。

-fast の変更

-fast オプションは、一般的にランタイム・パフォーマンスを向上させるオプションのセットを指定するための簡単な方法です。ドキュメントに記載されているように、オプションのセットは変更されることがあります。-fast は、バージョン 10.0 では -xT を設定しますが、以前のバージョンでは -xP を設定します。この変更により不都合が生じる場合は、-fast を使用する代わりに、各オプションを個別に設定する必要があります。詳細は、ドキュメントの「コンパイラー・オプション」を参照してください。

最適化された例外処理の実装

このバージョンでは、最適化の可能性を広げるために内部表現が単純化され、例外処理が完全に再設計されています。以下の点が改善されています。

Mudflap ポインターチェック

Mudflap は、コンパイル時のインストルメンテーションに基づき、ポインターの使用方法をチェックするための技術です。安全ではない可能性があるさまざまな C/C++ 構造に対して保護コードを追加し、ランタイム時に実際のエラー箇所を検出します。検出されるエラーは次のとおりです。

Mudflap ポインターチェックを有効にするには、-fmudflap コンパイラー・オプションを使用し、アプリケーションをリンクするコマンドで -lmudflap を指定します。

C++ クラス階層解析

C++ クラス階層解析は、C++ クラス階層情報を使用してコンパイラーに情報を提供します。これにより、コンパイル時により多くの仮想関数が解決可能となり、パフォーマンスが向上します。

手動 CPU ディスパッチの新しい cpuid コード

cpu_dispatch キーワードおよび cpu_specific キーワードで、インテル® Core™2 プロセッサーおよびストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 対応のインテル® Xeon® プロセッサー用の cpuid コード core_2_duo_ssse3 を使用できるようになりました。

改善されたパラレライザーおよびベクトライザー

このバージョンでは、メモリーおよびループの最適化を行う最適化レベル O2O3 で、並列化 (IA-32、インテル® 64、および IA-64 システム) とベクトル化 (IA-32 およびインテル® 64 対応システム) を統合するように最適化機構が完全に再設計されています。

次の改善により、パフォーマンスの大幅な向上が期待できます。

新しく強化された高度なループ変換の最適化レポート

ループ変換 (HLO) の最適化レポートは、ループ変換 (交換) を適用できなかった原因を示し、検出されたボトルネックが、ソースの変更により排除できる場合はループ変換を推奨します。これらのレポートは、より詳細な情報を提供し、理解しやすいように強化されています。

括弧で囲まれた型を使用する new 演算子の動作変更

C++ の new 演算子では、括弧で囲まれた型の直後に配列インデックスを使用することはできません。次に例を示します。

int main()
{
  char *p1 = new (char *)[20]; // array index is not allowed after ")"
  return 0;
}

以前のバージョンのインテル® C++ コンパイラーでは、配列インデックスは作成する型の一部とみなされ、コンパイラーおよび対象となる互換性バージョンにより、次のいずれかとして処理されました。

new ((char*)[20])

または

(new (char *))[20]

このバージョンでは、互換性バージョンが gcc 3.4 以降の場合、このような誤った使用をエラーとみなすように変更されています。gcc 3.3 以前の互換モードでは、配列インデックスは作成する型の一部とみなされます (gcc 3.3 の動作と同じです)。

-std=c99 および -std=c89 の動作変更

-std=c99 オプションまたは -std=c89 オプションを使用する場合、インテル® コンパイラー 10.0 の動作は gcc と同じで、__STRICT_ANSI__ マクロを事前に定義します。アプリケーションがコンパイルエラーとなり、以前のバージョンの動作を使用する場合は、コマンドラインに -U__STRICT_ANSI__ を追加してください。

スタティックの検証

スタティックの検証は、複数のソースファイルに渡ってプログラムを静的に解析する新しい機能です。ユーザーコード内のさまざまな不具合や言語機能と矛盾している箇所を特定して、重要度に応じて報告します。スタティックの検証は、C/C++ および Fortran のコードを理解し、OpenMP 宣言子の解析も行います。
 
本リリースでは、スタティックの検証を有効にすると、リンカーが起動されず、実行ファイル、スタティック・リンク・ライブラリー、またはダイナミック・リンク・ライブラリーが生成されません。スタティックの検証により生成されるオブジェクト・ファイルは有効なものではなく、実際の実行ファイル、スタティック・リンク・ライブラリー、またはダイナミック・リンク・ライブラリーの生成には使用できません。現在の使用モデルでは、スタティックの検証は診断レポートを生成するための代替ビルドオプションとして追加されています。

スタティックの検証は、クロスファイルのプロシージャー間の最適化 (/Qipo) とともに使用することはできません。

詳細は、ドキュメントの「アプリケーションのビルド」 > 「エラー処理」 > 「コンパイル時エラー処理」 > 「スタティックの検証診断オプションの使用」を参照してください。

Eclipse IDE でのスタティックの検証の使用

IDE 内でスタティックの検証サポートを有効にすると、最終的なビルドターゲット (例: 実行ファイル) は作成されません。スタティックの検証が必要な場合は、デバッグ (開発) 構成のコピーを作成して、スタティックの検証構成を別途作成することを推奨します。

Eclipse サポートについて

インテル® C++ コンパイラーおよび idb デバッガーに対する、コンパイラーとデバッガーの Eclipse と C/C++ Development Tools (CDT) への統合が提供されています。ただし、コンパイラーとデバッガーの統合に必要な共通の Eclipse ベース・コンポーネント (Eclipse Platform Binary、Eclipse C/C++ Development Tools (CDT)、JRE) は、コンパイラー・キットでは提供されていません。共通コンポーネントを無料で入手する方法の詳細については、インストール・ガイドで説明しています。

バージョン 10.0 の統合は、以下の環境で動作確認されています。

Eclipse 3.2.x、C/C++ Development Tools (CDT) 3.1.x、および Eclipse 3.2.1 でサポートされている JRE (または Java プラットフォーム) であれば、正しく動作します。

Eclipse 3.2.1 についての詳細は、次の Web サイトにある Eclipse のリリースノートおよび README を参照してください。

http://www.eclipse.org/eclipse/development/readme_eclipse_3.2.1.html (英語)
http://download.eclipse.org/eclipse/downloads/drops/R-3.2.1-200609210945/index.php (英語)

インテル® 64 対応アプリケーションにおける libimf のリンク方法の変更

以前のバージョンのインテル® C++ コンパイラーの一部では、インテル® 64 対応アプリケーションは、ほかのライブラリーには静的にリンクされましたが、libimf にはデフォルトでダイナミック (共有オブジェクト) バージョンにリンクされました。現在のバージョンでは、-shared-intel を使用しない限り、libimf は静的にリンクされます。これは IA-32 システムにおける動作と同じです。インテル® コンパイラーによりビルドされた共有オブジェクトにリンクする場合、-shared-intel を使用してインテルのダイナミック・ライブラリーを指定します。

libimf の変更により、次に示すリンカーからのメッセージが表示されることがあります。

warning: feupdateenv is not implemented and will always fail

この警告はライブラリー・タイプの不一致が原因で、無視することができます。-shared-intel を使用する場合、この警告は表示されません。

新しい -early-template-check スイッチ

最新バージョンの g++ (3.4 以降) ではテンプレート定義を解析しますが、セマンティクスのチェックはほとんど行われません。多くのセマンティクスは、実際にインスタンス化が行われるまで、チェックされません。そのため、g++ では使用不可能なテンプレートを使用することができます (ただし、実際にプログラムで使用されないテンプレートでなければなりません)。インテル® C++ コンパイラーでは、新しいオプション (-early-template-check) を利用して、インスタンス化を行う前に、関数テンプレートのプロトタイプのセマンティクスをチェックできます。

例:

 class A {};
   template <class T> struct B {
     B () {}; // error with -early-template-check): no initializer for
              // reference member "B<T>::a"
     A& a;
   };

このスイッチは、gcc 3.4 以降の互換モード (-gcc-version=340 以降) でのみ動作します 。

-ansi-fp-port を意味しなくなりました

以前のバージョンのコンパイラーでは、-ansi スイッチは -fp-port を意味していました。バージョン 10.0 では、-ansi -fp-port を意味しなくなりました。そのため、特に x87 命令を使用する浮動小数点の演算において、コンパイラーは -ansi でより効率的なコードを生成できるようになりました。代入時およびキャスト時に、浮動小数点データをソースの精度に丸める必要がある場合は、-fp-port-ansi を併用してください。

C++ での -cxxlib-icc のサポート終了

本リリースでは、C++ アプリケーションをリンクする際に、以前のリリースで提供されていた Dinkumware の C++ ライブラリーの代わりに、GNU g++ の C++ ライブラリーを使用する必要があります。この変更により、本リリースでは gcc 3.2 以上がインストールされているシステムが必要となります。

インテル® 64 対応アプリケーションでの __m64 型の変数の初期化

__m64 データ型は、整数値で __m64 を静的に初期化できるという点に関しては、スカラーとして扱われていました。しかし、MMX 対応のほかのコンパイラーと同様に、MMX 機能のサポートは終了しました。そのため、__m64 型の変数の初期化子は、中括弧 ({ }) で囲む必要があります。アプリケーションでスカラーを使用して __m64 型の変数を指定している場合、コンパイラーは次のようなエラーメッセージを表示します。

error: a value of type "unsigned long long" cannot be used to initialize an entity of type "const __m64"

動作環境

プロセッサー用語

インテル® コンパイラーは、一般的なプロセッサーとオペレーティング・システムを組み合わせた、3 つのプラットフォームをサポートしています。このセクションでは、本ドキュメント、インストール手順、およびサポートサイトでプラットフォームの記述に使用されている用語について説明します。

IA-32 (32 ビット インテル® アーキテクチャー):
32 ビット・オペレーティング・システムを実行し、少なくともインテル® Pentium® II 命令セットをサポートしている 32 ビット・プロセッサー (インテル® Core™ プロセッサー、インテル® Xeon® プロセッサー) または同じ命令セットをサポートしている他社製のプロセッサーがベースのシステム ("Linux x86") を指します。
インテル® 64 (旧称: インテル® エクステンデッド・メモリー 64 テクノロジー (インテル® EM64T)):
64 ビット・アーキテクチャーに対応するように拡張され、64 ビット・オペレーティング・システム ("Linux x86_64") を実行している IA-32 プロセッサー (インテル® Core™2 プロセッサー、インテル® Xeon® プロセッサーなど) がベースのシステム。32 ビットの Linux オペレーティング・システムを実行しているシステムは、IA-32 とみなされます。64 ビット・オペレーティング・システムを実行している、AMD* Athlon64* プロセッサーおよび Opteron* プロセッサーがベースのシステムも、インテル® 64 対応アプリケーション開発用インテル® コンパイラーでサポートされています。
IA-64:
64 ビット・オペレーティング・システムを実行している、インテル® Itanium® 2 プロセッサー・ベースのシステム。

ネイティブおよびクロスプラットフォーム開発

「ネイティブ」とは、アプリケーションを実行するプラットフォームと同じプラットフォームでアプリケーションをビルドする (例えば、IA-32 システムで実行するアプリケーションを IA-32 システムでビルドする) ことを指します。「クロスプラットフォーム」または「クロスコンパイル」とは、アプリケーションを実行するプラットフォームとは異なる種類のプラットフォームでアプリケーションをビルドする (例えば、IA-64 システムで実行するアプリケーションを IA-32 システムでビルドする) ことを指します。すべての組み合わせのクロスプラットフォーム開発がサポートされているわけではありません。また、組み合わせによっては、オプションのツールとライブラリーをインストールする必要があります。

サポートされているホスト (アプリケーションをビルドするシステム) とターゲット (アプリケーションを実行するシステム) の組み合わせを次に示します。

ホスト: IA-32 システム
サポートされているターゲット: IA-32
 
ホスト: インテル® 64 対応システム
サポートされているターゲット: IA-32 およびインテル® 64 対応システム
 
ホスト: IA-64 システム
サポートされているターゲット: IA-64 システム

注: ホストと異なるターゲットの開発を行う場合、Linux ディストリビューションから別のライブラリー・コンポーネントのインストールが必要になることがあります。

注: インテル® クラスター OpenMP にはライセンスが別途必要で、動作環境もコンパイラーとは異なります。詳細は、インテル® クラスター OpenMP のドキュメントを参照してください。

IA-32 アプリケーション開発に必要な環境

インテル® 64 対応システムまたは AMD Opteron プロセッサー・システム用のアプリケーション開発に必要な環境

IA-64 対応アプリケーション開発に必要な環境

gcc バージョンに関する注意事項

インテル® コンパイラーは、 さまざまな Linux ディストリビューションと gcc バージョンで動作確認されています。gcc 3.2.3、3.3.3、3.3、3.2、3.4、4.0、4.1 で動作は確認されていますが、 binutils のバージョンによって影響を受けることがあります。2.14 以降を使用することを推奨します。一部の Linux ディストリビューションには、動作確認に使用したヘッダーファイルとは異なるバージョンのものが含まれていて、問題を引き起こすことがあります。使用する glibc のバージョンは、gcc のバージョンと同じでなければなりません。

注:

Red Hat Enterprise Linux AS 2.1 で Eclipse 統合開発環境を使用する場合、次の環境も必要になります。

インストール

コンパイラーのインストールおよびコンパイラー環境の設定についての情報は、「インストール・ガイド」を参照してください。デフォルトのインストール・ディレクトリーは、次のとおりです (このドキュメントでは <install-dir> および <idb-install-dir> として表記されています)。

既知の問題

OpenMP アプリケーションのバイナリーの非互換性

-openmp スイッチを使用してインテル® コンパイラー 9.0 でコンパイルしたプログラムは、インテル® コンパイラー 10.0 をインストールすると実行できなくなることがあります。ローダーはランタイム時に終了し、_intel (例: _intel_fast_memset) という文字列から始まる未定義のシンボルに関するエラーメッセージが表示されます。この場合、インテル® コンパイラー 10.0 を使用して実行ファイルを再コンパイルすると、ローダー・エラー・メッセージは表示されなくなります。

Red Hat Enterprise Linux 3 Update 4 (SGI ProPack 3 Service Pack 5) とのヘッダーの互換性

Red Hat Enterprise Linux 3 Update 4 では、/usr/include/c++/3.2.3/ia64_Red Hat-linux/bits/os_defines.h ファイルにインライン・アセンブリー・コードが追加されました。この結果、インテル® C++ コンパイラーは、このヘッダーを参照しているソースのコンパイルに失敗するようになりました。この問題は、EL3 の以前のバージョンや Red Hat Enterprise Linux の次のメジャーリリースのベータ版を含め、Linux の他のバージョンでは発生しないので注意してください。この問題は、SGI ProPack 3 Service Pack 5 にも影響します。

この問題を修正したヘッダーファイルは、http://www.intel.com/software/products/compilers/downloads/os_defines.h.90 からダウンロードできます。

この修正ファイルは、インストールしたコンパイラーの代用ヘッダー・ディレクトリーに配置してください。次に例を示します。
<install-dir>/substitute_headers/c++/bits/os_defines.h
パスは bits/os_defines.h で終わる必要があります。ここに配置すると、コンパイラーはファイルを自動的に検索します。既存のインストーラーが作成したディレクトリー <install-dir>/substitute_headers を検索して、そのディレクトリーにサブディレクトリー c++/bits を作成してください。

-ipo_obj オプションのサポートの終了

直接オブジェクト・コードの生成を強制する -ipo_obj オプションはサポートされなくなりました。このオプションが指定された場合、警告が表示され、代わりに -ip オプションが指定された状態になります。

OpenMP の制限事項

-g とインライン展開を組み合わせた場合のコンパイル時間の増加

-g をインライン展開と組み合わせて使用すると、コンパイル時間が長くなることがあります。-ipo、-ip を指定した場合や -O1 以上のオプションレベルで C++/C99 プログラムをコンパイルする場合、インライン展開が発生します。これはデバッグ情報が生成されるためです。多くのアプリケーションでは、このコンパイラー・オプションの組み合わせで、コンパイル時間やコンパイル時のメモリー容量を増加させることがありません。

glibc 2.2.4-26 でコンパイラーがハングする

Red Hat AS2.1 のオリジナルバージョンと一緒に出荷されている glibc のバージョン 2.2.4-26 には問題があることがわかっています。このバージョンでコマンド icc -v または icc -V を使用すると、コンパイラーがハングします (ファイルはコンパイルされません)。これは、glibc 2.2.4-31.7 にアップグレードすることで、問題は解決します。AS2.1 にアップデートを適用している場合、この問題は発生しません。この問題は、AS2.1 を初期にインストールして更新を行ってない場合にのみ発生します。

x86_64 システムでの SPEC* CPU2006 471.omnetpp における結果の誤りと不一致

x86_64 システム (インテル® 64 対応システム、および同等のシステム) で動作する一部の Linux ディストリビューションでは、gcc binutils リンカーに問題があることがわかっています。SPEC CPU2006 ベンチマーク・テスト 471.omnetpp を実行すると、誤った結果が出力されます。この問題は、さまざまバージョンのインテル® C++ コンパイラーおよび gcc で再現されています。すべての Linux ディストリビューションで問題のリンカーを使用しているわけではありません。この問題の Bugzilla レポートは、http://sourceware.org/bugzilla/show_bug.cgi?id=2655 (英語) および http://sourceware.org/bugzilla/show_bug.cgi?id=2657 (英語) から入手できます。

使用している Linux ディストリビューションで問題のリンカーが使用されているかどうかは、配布元までお問い合わせください。

IA-64 システムで -relax がリンカーに渡されない

バージョン 10.0 から、-r オプションと競合するために、コンパイラー・ドライバーは IA-64 システムで -relax スイッチをリンカーに渡さないようになりました。binutils 2.11.90.0.27 以降 (2.14 を推奨) を使用している場合、-relax オプションはデフォルトで指定されるため、指定する必要はありません。古いバージョンの binutils を使用していて -relax オプションを指定する場合、リンカーを起動するコンパイラーのコマンドで -Xlinker -relax を使用してください。

SLES 10 での libunwind.so.7 に関する ld 警告

SUSE LINUX Enterprise Server 10 上でインテル® コンパイラーを使用してアプリケーションをビルドすると、次のような警告が表示されることがあります。

ld: warning: libunwind.so.7, needed by /usr/lib/gcc/ia64-suse-linux/4.1.0/../../..//libgcc_s.so, may conflict with libunwind.so.6

icc.cfg に次の行を追加して、この問題を回避することができます。

-L /usr/lib

この問題は、インテル® コンパイラーの将来のバージョンで修正される予定です。

自動 CPU ディスパッチ (-ax*) 使用時のデバッグ情報の制限

-ax{W|N|B|P} を使用してコンパイルを行うと、各関数について IA-32 汎用コードと CPU 特有のコードの 2 種類のコードが生成されます。各関数のシンボルは自動 CPU ディスパッチ・ルーチンを参照して、ランタイムに実行するコードセクションを決定します。これらの関数にデバッガーのブレークポイントが名前でセットされると、ディスパッチ・ルーチンでアプリケーションが停止します。その結果、デバッグ時に予測できない動作が発生します。この問題は、インテル® デバッガーおよびインテル® コンパイラーの将来のバージョンで修正される予定です。

-fp オプションを使用しないでビルドされた IA-32 プログラムをデバッグまたはトレースバック表示できない

-fp を使用してコンパイルを行うと、IA-32 EBP レジスターは汎用レジスターではなくフレームポインターとして使用されます。デバッガーおよびトレースバック・ハンドラーは、-fp を使用しないでコンパイルされた関数への呼び出しを含むスタックから適切にスタックを戻すことができません。-g または -O0 を使用してコンパイルすると、-fp は暗黙的に有効になりますが、より高い最適化レベル (-O2 など) を明示的に指定した場合は有効になりません。アプリケーションでデバッガーまたはトレースバックを使用する場合で、-O0 よりも高い最適化レベルを使用する場合は、デバッガーおよびトレースバック・ハンドラーがフレームポインターを使用できるように、-fp も指定してください。

GNU アセンブラーが生成されたコードを認識しない

古いバージョンの GNU アセンブラーは、-[a]xPT、または S オプションを使用して生成されたアセンブリー・コードを処理できません。この問題が発生した場合は、binutils バージョン 2.17.50.0.15 以降を使用してください。

古い gdb デバッガーとインテル® コンパイラー

インテル® コンパイラー Linux 版は、Dwarf2 の高度な機能 (クラス内でネストされた宣言など) を含む、Dwarf2 形式のデバッグ情報を生成します。バージョン 5.3.90-* のような、古い gdb デバッガーは、これらの Dwarf 機能を正しく処理できないことがあります。C++ の表現をフルに使用するソースコードを正しく処理するためには、gdb のバージョン 6.1 以降を使用してください。

拡張デバッグ情報と idb の使用

-debug キーワード inline_debug_infosemantic_steppingvariable_locations または extended を使用する場合、インテル® デバッガーを使用してください。他のデバッガーを使用すると、拡張デバッグ情報が正しく処理されず、予期しない動作が行われる可能性があります。弊社では、現在、他のデバッガーの開発者と拡張デバッグ情報をサポートするための作業を進めております。

テクニカルサポート

インテルでは、お客様からのフィードバックを非常に重視しております。http://www.intel.com/software/products/support (英語) から、本製品で提供されるツールについてのテクニカルサポートを利用したり、FAQ や製品のアップデート情報を含むテクニカル情報を入手することができます。

注: 代理店がテクニカルサポートを提供している場合は、インテルではなく代理店にお問い合わせください。

インテル® C++ コンパイラーのユーザーフォーラム、FAQ、ヒント、およびその他のサポート情報は、http://support.intel.com/support/performancetools/c/linux/ (英語) を参照してください。サポート情報全般については、http://www.intel.com/software/products/support/ (英語) を参照してください。

問題の送信方法

問題を送信する手順は次のとおりです。

  1. http://www.intel.com/software/products/support (英語) にアクセスして、インテル® プレミアサポートのリンクをクリックします。
  2. サイトにログインします。ログイン名とパスワードを入力します。どちらも大文字と小文字が区別されます。
  3. 左側のナビゲーション・バーの [Submit Issue] リンクをクリックします。
  4. [Product Type] ドロップダウン・リストから [Development Environment (tools,SDV,EAP)] を選択します。
  5. ソフトウェアまたはライセンスに関する問題の場合は、[Product Name] ドロップダウン・リストから [Intel® C++ Compiler for Linux*] を選択します。
  6. 質問を入力します。ウィンドウの残りのフィールドも記入して、問題箇所の送信を完了します。

注: 特定の国へのアクセスを制限する必要があるソースコードを送信する場合は、ソースコードを送信する前にサポート担当者までお問い合わせください。

問題の報告および製品に関するご意見を送信される際のガイドライン

  1. 問題、その他ご意見を入力してください。
    問題の報告の場合は、その問題を再現できるように、できるだけ具体的に説明してください。コンパイラーの問題報告の場合は、できるだけコンパイラー・オプションと簡単なテストコードを追加してください。
  2. システム構成情報を入力してください。
    次のコマンドを使用して glibc とカーネルのバージョンを調べます。
        > uname -a
        > rpm -qa | grep glibc
    rpm をインストールしている場合は、下記のコマンドを実行します。
        > ls /lib/libc*
    インテル® プレミアサポートの適切なフィールドに、表示された情報をコピーします。

    下記のコマンドで、インテル® C++ コンパイラーのパッケージ ID を取得します。
        > icc -V
    出力された「Package ID」(例: l_cc_p_10.0.xxx) をインテル® プレミアサポートの適切なフィールドにコピーします。また、問題の解決に役立つと思われる事項はすべてお伝えください。

  3. コンパイラーをインストールできない場合、またはパッケージ ID を取得できない場合は、ダウンロードしたファイル名をパッケージ ID として入力してください。

解決済みの問題

コンパイラーの最新バージョンで修正された問題点については、インテル® レジストレーション・センターからダウンロードできる <package ID>_README (例: l_cc_p_10.0.xxx_README) を参照してください。

Compiler Error Source Reducer (CESR)

Compiler Error Source Reducer (CESR) は、C/C++ または Fortran ソースコードで構成されたテストケースの収集、縮小、特定、保護、文書化、およびバンドルを行うユーティリティーのセットです。大規模なアプリケーションからインテル® プレミアサポートに送信する小さなテストケースを抽出する場合に便利です。CESR は、インテル® レジストレーション・センターの [製品のダウンロード] からダウンロードできます。製品を選択して、バージョンのドロップダウンから [CESR] を選択します。CESR は試験的に提供されているもので、サポートは提供されておりません。CESR に関するご意見およびご感想は、インテル® プレミアサポートまでお寄せください。CESR を利用するには、Python 2.2 またはそれ以降をあらかじめインストールしておく必要があります。

ドキュメント

インテル® コンパイラーのドキュメントおよび HTML ベースの関連ドキュメントは、ご使用の Web ブラウザーでご覧になれます。Firefox などの JavaScript をサポートしている Web ブラウザーで、JavaScript を有効にしてアクセスすることで、オンライン・ヘルプ・ファイルでフル・ナビゲーション、検索、キーワード検索、およびハイパーリンク機能を利用できます。ほとんどのマニュアルの PDF バージョン (英語) は、http://developer.intel.com/software/products/compilers/clin/docs/manuals.htm から入手できます。

ドキュメントは、<install-dir>/doc ディレクトリーにインストールされます。HTML 版のドキュメント・インデックスは、<install-dir>/doc/doc_index.htm です。 『Intel® Debugger Manual』(HTML 形式、英語) は、インテル® デバッガーの doc ディレクトリーにあります。

GNU glibc C 言語ライブラリーについての情報は、Linux OS のベンダー、または GNU の Web サイト www.gnu.org (英語) でドキュメントを入手してください。

manpage の表示

icc(1) manpage では、コマンドライン・オプションおよび icc および icpc コンパイラー・コマンドに関する情報のリストが提供されています。icc(1) manpage を表示するには、<install-dir>/bin/iccvars.*sh ファイルを実行する source コマンドを使用して環境を設定してから、次のコマンドを入力してください。
$ man icc
man コマンドでは、表示された内容のスクロール、文字列の検索、特定の場所へのジャンプ、その他の機能を実行する単一キーまたはキーの組み合わせを利用できます。例えば、z を入力すると次の画面、w を入力すると前の画面を表示します。man コマンドのヘルプを表示するには、h キーを入力します。ヘルプを閉じるには、q キーを入力して、表示されている manpage に戻ります。検索するには、/ 文字の後に検索する文字列 (/string) を入力して、Enter を押します。man コマンドのテキストの表示後、q を押すと、シェルコマンドのプロンプトに戻ります。

ドキュメントの表示

HTML ドキュメント形式は、サポートされている Linux ディストリビューションに付属している Web ブラウザーで動作することを確認しています。コンパイラー・ドキュメンテーションの PDF バージョン (英語) は、http://developer.intel.com/software/products/compilers/clin/docs/manuals.htm から入手できます。

追加情報

関連製品とサービス

インテル® ソフトウェア開発製品の詳しい情報については、http://www.intel.co.jp/jp/software/products/ を参照してください。

関連製品の一部を次にリストします。

著作権と商標について

本資料に掲載されている情報は、インテル製品の概要説明を目的としたものです。本資料は、明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず、いかなる知的財産権のライセンスを許諾するためのものではありません。製品に付属の売買契約書『Intel's Terms and Conditions of Sale』に規定されている場合を除き、インテルはいかなる責を負うものではなく、またインテル製品の販売や使用に関する明示または黙示の保証(特定目的への適合性、商品性に関する保証、第三者の特許権、著作権、その他、知的所有権を侵害していないことへの保証を含む)にも一切応じないものとします。インテル製品は、医療、救命、延命措置、重要な制御または安全システム、核施設などの目的に使用することを前提としたものではありません。

インテル製品は、予告なく仕様や説明が変更される場合があります。

機能または命令の一覧で「留保」または「未定義」と記されているものがありますが、その「機能が存在しない」あるいは「性質が留保付である」という状態を開発の前提にしないでください。留保または未定義の機能を不適当な方法で使用すると、開発したソフトウェア・コードをインテル・プロセッサー上で実行する際に、予測不可能な動作や障害が発生するおそれがあります。 これらの項目は、インテルが将来のために留保しているものです。インテルが将来これらの項目を定義したことにより、衝突が生じたり互換性が失われたりしても、インテルは一切責任を負いません。

本資料で説明されているソフトウェアには、不具合が含まれている可能性があり、公開されている仕様とは異なる動作をする場合があります。現在までに判明している不具合の情報については、インテルのサポートサイトをご覧ください。

本資料およびこれに記載されているソフトウェアはライセンス契約に基づいて提供されるものであり、その使用および複製はライセンス契約で定められた条件下でのみ許可されます。本資料で提供される情報は、情報供与のみを目的としたものであり、予告なしに変更されることがあります。また、本資料で提供される情報は、インテルによる確約と解釈されるべきものではありません。インテルは本資料の内容およびこれに関連して提供されるソフトウェアにエラー、誤り、不正確な点が含まれていたとしても一切責任を負わないものとします。ライセンス契約で許可されている場合を除き、インテルからの文書による承諾なく、本書のいかなる部分も複製したり、検索システムに保持したり、他の形式や媒体によって転送したりすることは禁じられています。

Intel、インテル、Intel ロゴ、Intel Core、Itanium、Pentium、VTune、Xeon は、アメリカ合衆国およびその他の国における Intel Corporation の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

© 2007 Intel Corporation.