インテル(R) C++ コンパイラー 9.1 Linux* 版
リリースノート

目次

概要

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

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

製品の内容

IA-32 ベース・アプリケーション用 インテル C++ コンパイラー

IA-32 ベース・アプリケーション用 インテル C++ コンパイラーは以下の内容で構成されています。

インテル EM64T ベース・アプリケーション用インテル C++ コンパイラー

インテル EM64T ベース・アプリケーション用 インテル C++ コンパイラーは以下の内容で構成されています。

Itanium アーキテクチャー用 インテル C++ コンパイラー

Itanium アーキテクチャー用 インテル C++ コンパイラーは、以下の内容で構成されています。

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

インテル C++ コンパイラー Linux 版は、Eclipse 統合開発環境 (IDE) および C/C++ Development Tools (CDT) と統合できます。この機能は、コンパイラーのインストールの一部としてインストールされます。

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

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

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

リンク

バージョン 9.1 の新機能

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

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

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

-axT
IA-32 汎用コードと開発コード名「Merom」のインテル・プロセッサー (および互換インテル・プロセッサー) 用に最適化されたプロセッサー固有のコードを生成するように、コンパイラーに指示します (IA-32 およびインテル EM64T 対応システムのみ、デフォルト: オフ)
-dD
-dM と同じですが、プリプロセスされたコードに #define ディレクティブを出力します。(デフォルト: オフ)
-dM
プリプロセス後に有効なマクロ定義を出力します。(デフォルト: オフ)
-dN
-dD と同じですが、#define ディレクティブにはマクロ名のみ含まれます。(デフォルト: オフ)
-early-template-check
インストール前に関数テンプレートのプロトタイプのセマンティクスをチェックします。(デフォルト: オフ)
-fargument-alias
-alias-args と同じです。(デフォルト: オン)
-finline-limit=n
インライン化する 1 つの関数の最大サイズを指定します。(デフォルト: オフ)
-f[no-]non-lvalue-assign
lvalue としてのキャストおよび条件式の使用を有効または無効にします。(デフォルト: -fnon-lvalue-assign)
-[no-]ftz
デノーマルな範囲へのアンダーフローが発生する浮動小数点計算でゼロへのフラッシュを有効または無効にします。このオプションの動作は、バージョン 9.1 で変更されました。
-fvisibility-inlines-hidden
インラインメンバー関数を非表示としてマークします。(デフォルト: オフ)
-inline-factor=<n>
上限を定義するすべてのインラインオプションに適用するパーセントの乗数を指定します。(デフォルト: オフ)
-inline-forceinline
コンパイラーがインライン化できる場合は常にインライン化するインラインルーチンを指定します。(デフォルト: オフ)
-inline-max-per-compile=<n>
コンパイル単位全体に適用されるインライン化の最大数を指定します。(デフォルト: オフ)
-inline-max-per-routine=<n>
インライナーが特定のルーチンにインライン化する最大数を指定します。(デフォルト: オフ)
-inline-max-size=<n>
インライナーが大規模ルーチンであるとみなすサイズの下限を指定します。(デフォルト: オフ)
-inline-max-total-size=<n>
インライン拡張が行われるときのルーチンのサイズの上限を指定します。(デフォルト: オフ)
-inline-min-size=<n>
インライナーが小規模ルーチンであるとみなすサイズの下限を指定します。(デフォルト: オフ)
-iquote <dir>
引用符で囲まれたファイル (大括弧で囲まれたものは含まれません) のインクルード・ファイル検索パスの先頭へディレクトリーを追加します。(デフォルト: オフ)
-isystem <dir>
システム・インクルード・パスの先頭に追加するディレクトリーを指定します。(デフォルト: オフ)
-mcmodel=mem_model
指定するメモリーモデルを使用してコードの生成、データのストアを行うようにコンパイラーに指示します。(インテル EM64T 対応システムのみ、デフォルト: -mcmodel=small)
-mtune itanium2-p9000
デュアルコア インテル Itanium 2 プロセッサー 9000 番台のプロセッサー用に最適化します。(デフォルト: オフ)
-opt-mem-bandwidth<n>
プロセッサー間のメモリー帯域幅を制御するパフォーマンス・チューニングとヒューリスティックを有効または無効にします。(Itanium ベース・システムのみ、デフォルト: シリアルコンパイルの場合は 0、パラレルコンパイルの場合は 1)
-xT
開発コード名「Merom」のインテル・プロセッサーおよび互換インテル・プロセッサー用に最適化されたプロセッサー固有のコードを生成するように、コンパイラーに指示します。

-xP および -axP コード生成スイッチの使用

-xP および -axP スイッチを使用すると、インテル Core プロセッサーを含む、ストリーミング SIMD 拡張命令 3 (SSE3) をサポートするインテル・プロセッサー向けの専用コードが生成されます。

-ftz および新しい -no-ftz 動作の変更

浮動少数点計算結果が正規化数として表現するには小さすぎる場合、デフォルトでは精度が低下した非正規化数が格納されます。これ以降の非正規化数を使用する計算では、パフォーマンスが著しく低下することがあります。以前のバージョンのコンパイラーでは、-ftz オプションを指定し、このような値をゼロに変換 (フラッシュ) して、パフォーマンスを向上させることができました。ただし、このオプションは一貫して実装されていませんでした。

Itanium ベース・システムでは、-O3 が指定されると -ftz も暗黙的に有効になります。

バージョン 9.1 では、-ftz はすべてのプロセッサーでサポートされています。また、SSE 命令と X87 命令の計算結果も一貫しています。しかし、IA-32 およびインテル EM64T ベース・システムで -ftz を明示的に指定し、X87 命令を使用する演算を行うと、パフォーマンスが著しく低下します。このオプションは、パフォーマンスよりもアンダーフローの計算結果の一貫性のほうが重要な場合のみ使用するようにしてください。

-O3 が指定されている Itanium ベース・システムで 非正規化数をゼロにフラッシュしないようにする場合や、IA-32 およびインテル EM64T ベース・システムで SSE 命令が使用される場合は、新しい -no-ftz オプションを使用します。これによりパフォーマンスは著しく低下しますが、他の最適化を有効にしても非正規化数は保持されます。

拡張された GNU* との互換性

異なる GNU バージョンのセマンティクスが厳密に一致するように GNU との互換性が拡張されました。たとえば、-gcc-version=340 (GNU バージョン 3.4 のヘッダーおよびライブラリーがシステムにインストールされている場合、自動的に設定される) では、ISO/ANSI C++ 規格への準拠が強化されました。

特定の変更については、GNU のドキュメント (http://gcc.gnu.org/gcc-3.4/changes.html の C++ のセクション) を参照してください。

可変長配列の改善

C++ の可変長配列の要素は、POD (Plain Old Data) 型に制限されなくなりました。

C++ コピー・コンストラクターの最適化

ローカル変数とリターンタイプの cv- 修飾子の相違にもかかわらず、C++ コピー・コンストラクターの戻り値を最適化することができるようになりました。また、直接初期化でのコピー・コンストラクターの呼び出しが省略されました。

Itanium ベース・システムでの Eclipse のサポート

Itanium ベース・システムで、Eclipse 統合開発環境および C/C++ Development Tools (CDT) と統合できるようになりました。

crtxn.o から crtend.o への変更

crtxn.o ファイルは crtend.o に変更されました。–cxxlib-icc モードのリンクのみ影響を受けます。これは、コンパイラーの他の変更に伴い変更されました。このファイル名は、ビルトイン・リンカー・スクリプトで初期化セクションを正しく順序付けるのに使用されます。これは、非静的に初期化されるグローバルを正しく初期化するために変更されています。

–cxxlib-icc モードで明示的なリンク行を使用する場合、対応する変更が必要になります。icc または icpc を使用してリンクする場合、変更の必要はありません。

インテル EM64T 対応システムでの libimf リンクの変更

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

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

warning: feupdateenv is not implemented and will always fail

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

新しい -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 以降) でのみ動作します 。

インテル EM64T ベース・システムにおける 3 つのメモリーモデル

インテル EM64T 対応のアプリケーションを構築するには、次の 3 つのメモリーモデルのいずれかを使用します。

Small (デフォルト)
コードとデータはアドレス空間の最初の 2GB までに制限されます。コードとデータのすべてのアクセスは命令ポインター (IP) 相対アドレス指定で行われます。
Medium (-mcmodel=medium)
コードはアドレス空間の最初の 2GB までに制限されますが、データは制限されません。コードは IP 相対アドレス指定でアクセスできますが、データのアクセスは絶対アドレス指定を使用する必要があります。
Large (-mcmodel=large)
コードもデータも制限されません。コードとデータのアクセスは、どちらも絶対アドレス指定を使用します。

IP 相対アドレス指定は 32 ビットのみ必要ですが、絶対アドレス指定は 64 ビット必要です。この違いはコードサイズとパフォーマンスに影響します (IP 相対アドレス指定の方が少し速い)。

注: medium または large メモリーモデルを指定した場合、インテルのランタイム・ライブラリーの正しいダイナミック・バージョンが使用されるように、-i-dynamic も指定する必要があります。

共有オブジェクト (.so) が構築された場合、位置独立コード (PIC) が指定される (コンパイラー・ドライバーによって -fpic が追加される) ため、単一の .so で 3 つのメモリーモデルすべてをサポートすることができます。しかし、スタティック・ライブラリーに配置されるコード、または静的にリンクされるコードは適切なメモリーモデルを指定して構築する必要があります。Medium または Large メモリーモデルを指定すると、パフォーマンスに影響があるので注意してください。

動作環境

プロセッサー用語

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

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

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

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

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

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

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

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

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

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

注: 32 ビット (IA-32) ライブラリーの要件は、これらのライブラリーにダイナミックにリンクする 32 ビット・アプリケーションであるコンパイラーおよび他のツールによります。これらのライブラリーがインストールされていない場合、コンパイラーを起動したときに次のエラーが表示されます。

error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory

このエラーメッセージは、libstdc++.so.5 の IA-32 バージョンが必要なことを示していないため、何が原因なのか一目ではわかりません。このエラーを回避するには、これらのライブラリーの 32 ビット (IA-32) バージョンをインストールする必要があります。インテル EM64T 対応のほとんどの Linux ディストリビューションは、これらのライブラリーをデフォルトでインストールします。32 ビット・ライブラリー (libstdc++ および libc) のインストール方法については、Linux ディストリビューションに付属のドキュメントを参照してください。  問題が解決しない場合は、インテル(R) プレミアサポートまでお問い合わせください。

Itanium ベース・アプリケーション開発に必要な環境

共有ライブラリーを使用する際は binutils 2.14 以降を使用してください (binutils 2.11 には問題があることが報告されています)。

注:

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

インストール

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

既知の問題

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

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

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

RedHat Enterprise Linux 3 Update 4 では、/usr/include/c++/3.2.3/ia64_redhat-linux/bits/os_defines.h ファイルにインライン・アセンブリー・コードが追加されました。この結果、インテル C++ コンパイラーは、このヘッダーを参照しているソースのコンパイルに失敗するようになりました。この問題は、EL3 の以前のバージョンや RedHat 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 を作成してください。

-cxxlib-gcc が C++ のデフォルト

C++ アプリケーションをリンクする場合、以前のリリースで使用されていた Dinkumware* ライブラリーではなく、STL および gcc C++ ライブラリーがデフォルトで使用されます。Dinkumware ライブラリーを使用する場合は -cxxlib-icc スイッチを指定してください。(インテル EM64T 対応システムでビルドする場合、-cxxlib-icc は利用できません。) インテル C++ コンパイラーの将来のリリースでは、Dinkumware ライブラリーのサポートはなくなる予定です。

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

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

OpenMP の制限事項

大きなサイズのスタックを必要とする POSIX スレッドのプログラムの場合、一部の Linux のバージョンでは正常に動作しないことがあります。これは、Linux の POSIX スレッド・ライブラリーのバージョンによっては、ハードコードされたスタックサイズに制限があるためです。インテル・コンパイラーでは POSIX スレッド・ライブラリーを使用して OpenMP ベースおよび自動生成による並列化を実装しているため、上記の制約は OpenMP プログラム (-openmp)、およびインテル・コンパイラーで自動生成された並列プログラム (-parallel) にも適用されます。通常、スタックの容量制限を超過したスレッドプログラムを実行すると、セグメンテーション違反またはアドレッシング・エラーが発生します。

この制約を回避するには、FLOATING_STACKS パラメーターが定義されている glibc のバージョンを使用するようにしてください。いくつかのディストリビューションでは、これは pthreads ライブラリーのスタティック・バージョンではなく、共用バージョンを使用することを意味します。そして、ulimit -s または limit stacksize コマンドを実行して、最大シェル・スタック・サイズを (unlimited ではない) 十分な大きさの値 (単位:KB) に設定し、さらに環境変数 KMP_STACKSIZE を必要なスレッド・スタック・サイズ (単位:バイト) に設定してください。bash シェルでは、ulimit -s コマンドを使用して最大スタックサイズを設定できるのは 1 回のみであることに注意してください。C シェル (csh) では、limit stacksize を使用することで、最大スタックサイズを何回でもリセットできます。

上記の回避方法は、RedHat 7.2 Linux ディストリビューションの glibc バージョン 2.2.4-13 (IA-32 版) および glibc 2.2.4-19 (Itanium プロセッサー・ファミリー版) で検証済みです。IA-32 版の glibc 2.2.4-13 に関しては、POSIX スレッド・ライブラリーの共用バージョンを必ず使用してください (コンパイラーの .cfg ファイル、またはコマンドラインで -static フラグを使用しないでください)。

-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 を初期にインストールして更新を行ってない場合にのみ発生します。

Itanium ベース・システムで -relax がリンカーに渡されない

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

自動 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 アセンブラーが -xP オプションを使用して生成されたコードを認識しない

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

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

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

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

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

テクニカルサポート

インテルでは、お客様からのフィードバックを非常に重視しております。本製品で提供されるツールについてのテクニカルサポートおよび FAQ や製品のアップデート情報を含むテクニカル情報を受けるには、https://premier.intel.com (英語) でインテル・プレミアサポート・アカウントに登録してください。https://registrationcenter.intel.com/ で登録を行います。

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

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

問題の送信方法

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

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

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

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

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

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

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

解決済みの問題

コンパイラーの最新バージョンで修正された問題点については、インテル・プレミアサポート (https://premier.intel.com) (英語) からダウンロードできる <package ID>_README (例: l_cc_p_9.1.xxx_README) を参照してください。

Compiler Error Source Reducer (CESR)

Compiler Error Source Reducer (CESR) は、C/C++ または Fortran ソースコードで構成されたテストケースの収集、縮小、特定、保護、文書化、およびバンドルを行うユーティリティーのセットです。大規模なアプリケーションからインテル・プレミアサポートに送信する小さなテストケースを抽出する場合に便利です。CESR は、インテル・プレミアサポートの [File Downloads] セクションからダウンロードできます。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(R) 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/developer/software/products/ を参照してください。

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

著作権と商標について

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

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

機能や命令の中に「予約済み」または「未定義」と記されているものがありますが、その機能が存在しない状態や何らかの特性を設計の前提にしてはなりません。これらの項目は、インテルが将来のために予約しているものです。インテルが将来これらの項目を定義したことにより、衝突が生じたり互換性が失われたりしても、インテルは一切責任を負わないものとします。

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

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

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

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

(C) 2006 Intel Corporation.