以下に含まれるその他のドキュメントサポート リソース | PDF 文書ファイルをダウンロードする (2188 KB)
A.2 オプションの一覧次の節では、C++ コンパイラオプションのアルファベット順の一覧と、プラットフォームの制限を示しています。 A.2.1 -386x86: -xtarget=386 と同じです。このオプションは、下位互換のためだけに用意されています。 A.2.2 -486x86: -xtarget=486 と同じです。このオプションは、下位互換のためだけに用意されています。 A.2.3 -aA.2.4 -Bbindingライブラリのリンク形式を、シンボリックか、動的 (共有)、静的 (共有でない) のいずれかから指定します。 -B オプションは同じコマンド行で何回も指定できます。このオプションはリンカー (ld) に渡されます。 注 – Solaris の 64 ビットコンパイル環境では、多くのシステムライブラリは、動的ライブラリのみ使用できます。このため、コマンド行の最後に -Bstatic を使用しないでください。 A.2.4.1 値binding には次のいずれかの値を指定します。
-B と binding との間に空白があってはいけません。 デフォルト-B を指定しないと、-Bdynamic が使用されます。 相互の関連性C++ のデフォルトのライブラリを静的にリンクするには、-staticlib オプションを使用します。 -Bstatic および -Bdynamic オプションは、デフォルトで使用されるライブラリのリンクにも影響します。デフォルトのライブラリを動的にリンクするには、最後に指定する -B が -Bdynamic でなければいけません。 64 ビットの環境では、多くのシステムライブラリは共有の動的ライブラリとしてのみ利用できます。これらのシステムライブラリには、libm.so および libc.so があります (libm.a と libc.a は提供していません)。その結果、-Bstatic と -dn を使用すると 64 ビットの Solaris オペレーティングシステムでリンクエラーが生じる可能性があります。この場合、アプリケーションを動的ライブラリとリンクさせる必要があります。 例次の例では、libfoo.so があっても libfoo.a がリンクされます。ほかのすべてのライブラリは動的にリンクされます。
警告C++ コードが含まれているプログラムでは、-Bsymbolic を使用せずに、リンカーのマップファイルを使用してください。 -Bsymbolic を使用すると、異なるモジュール内の参照が、本来 1 つの大域オブジェクトの複数の異なる複製に結合されてしまう可能性があります。 例外メカニズムは、アドレスの比較によって機能します。オブジェクトの複製が 2 つある場合は、アドレスが同一であると評価されず、本来一意のアドレスを比較することで機能する例外メカニズムで問題が発生することがあります。 コンパイルとリンクを別々に行う場合で、コンパイル時に -Bbinding オプションを使用した場合は、このオプションをリンク時にも指定する必要があります。 関連項目-nolib、-staticlib、 ld(1)、「12.5 標準ライブラリの静的リンク」、『リンカーとライブラリ』 A.2.5 -cコンパイルのみ。オブジェクト .o ファイルを作成しますが、リンクはしません。 この オプションは ld によるリンクを抑止し、各ソースファイルに対する .o ファイルを 1 つずつ生成するように、CC ドライバに指示します。コマンド行にソースファイルを 1 つだけ指定する場合には、-o オプションでそのオブジェクトファイルに明示的に名前を付けることができます。 A.2.5.1 例CC -c x.cc と入力すると、x.o というオブジェクトファイルが生成されます。 CC -c x.cc -o y.o と入力すると、y.o というオブジェクトファイルが生成されます。 警告コンパイラは、入力ファイル (.c、.i) に対するオブジェクトコードを作成する際に、.o ファイルを作業ディレクトリに作成します。リンク手順を省略すると、この .o ファイルは削除されません。 関連項目-o filename、-xe A.2.6 -cg{89|92}A.2.7 -compat[={ 4|5}]コンパイラの主要 リリースとの互換モードを設定します。このオプションは、__S UNPRO_CC_COMPAT と __c plusplus マクロを制御します。 C++ コンパイラには主要なモードが 2 つあります。1 つは互換モードで、4.2 コンパイラで定義された ARM の意味解釈と言語が有効です。もう 1 つは標準モードです。 このモードでは、構文は ANSI/ISO 標準に従っていなければいけません。これらのモードには互換性はありません。 ANSI/ISO 標準では、名前の符号化、vtable の配置、そのほかの ABI の細かい点で互換性のない変更がかなり必要であるためです。これらのモードは、次に示す -compat オプションで指定します。 A.2.7.1 値-compat オプションには次の値を指定できます。
デフォルト-compat オプションを指定しないと、-compat=5 が使用されます。 -compat だけを指定すると、-compat=4 が使用されます。 相互の関連性標準ライブラリは互換モード (-compat[=4]) で使用できません。 -compat[=4] では次のオプションの使用はサポートしていません。
-compat=5 では次のオプションの使用はサポートされません。
警告共有ライブラリを構築するときは、-Bsymbolic を使用しないでください。 関連項目『C++ 移行ガイド』 A.2.8 +dC++ 言語の規則では、C++ は、次の条件のうち 1 つがあてはまる場合にインライン化します。
C++ 言語の規則では、呼び出しを実際にインライン化するかどうかをコンパイラが選択します。ただし、次の場合を除きます。
A.2.8.1 例デフォルトでは、コンパイラは次のコード例で関数 f() と memf2() をインライン化できます。また、クラスには、コンパイラによって生成されたデフォルトのコンストラクタとコンパイラでインライン化できるデストラクタがあります。+d を使用すると、コンパイラでコンストラクタ f() とデストラクタ C::mf2() はインライン化されません。
相互の関連性デバッグオプション -g を指定すると、このオプションが自動的に有効になります。 -g0 デバッグオプションでは、+d は有効になりません。 +d オプションは、-x04 または -x05 を使用するときに実行される自動インライン化に影響を与えません。 関連項目-g0、-g A.2.9 -Dname[ =def]プリプロセッサに対してマクロシンボル名 name を def と定義します。 このオプションは、ソースファイルの先頭に #define 指令を記述するのと同じです。-D オプションは複数指定できます。 A.2.9.1 値次の表は、事前に定義されているマクロを示しています。これらの値は、#ifdef のようなプリプロセッサに対する条件式の中で使用できます。 表 A–2 事前定義マクロ
=def を使用しないと、name は 1 になります。 相互の関連性+p が使用されている場合は、sun、unix、sparc、i386 は定義されません。 関連項目-U A.2.10 -d{y| n}実行可能ファイル全体に対して動的ライブラリを 使用できるかどうか指定します。 このオプションは ld に渡されます。 このオプションは、コマンド行では 1 度だけしか使用できません。 A.2.10.1 値
デフォルト-d オプションを指定しないと、-dy が使用されます。 相互の関連性64 ビットの環境では、多くのシステムライブラリは共有の動的ライブラリとしてのみ利用できます。これらのシステムライブラリには、libm.so および libc.so があります。libm.a と libc.a は提供していません。その結果、-Bstatic と -dn を使用すると 64 ビットの Solaris オペレーティングシステムでリンクエラーが生じる可能性があります。この場合、アプリケーションを動的ライブラリとリンクさせる必要があります。 警告このオプションを動的ライブラリと組み合わせて使用すると、重大なエラーが発生します。ほとんどのシステムライブラリは、動的ライブラリでのみ使用できます。 関連項目ld(1)、『リンカーとライブラリ』 A.2.11 -dalign-dalign は、-xmemalign=8s を指定することと同じです。詳細は、「A.2.144 -xmemalign=ab」を参照してください。 A.2.11.1 警告あるプログラム単位を -dalign でコンパイルした場合は、プログラムのすべての単位を -dalign でコンパイルしなければいけません。そうしないと予期しない結果が生じることがあります。 A.2.12 -dryrunドライバによって作成されたコマンドを表示しますが、コンパイルはしません。 このオプションは、コンパイルドライバが作成したサブコマンドの表示のみを行い、実行はしないように CC ドライバ に指示します。 A.2.13 -Eソースファイルに対してプリプロセッサを実行しますが、コンパイルはしません。 C++ のソースファイルに対してプリプロセッサだけを実行し、結果を stdout (標準出力) に出力するよう CC ドライバに指示します。コンパイルは行われません。 したがって .o ファイルは生成されません。 このオプションを使用すると、プリプロセッサで作成されるような行番号情報が出力に含まれます。 A.2.13.1 例このオプションは、プリプロセッサの処理結果を知りたいときに便利です。たとえば、次に示すプログラムでは、foo.cc は、「A.2.13.1 例」に示す出力を生成します。 例 A–1 プリプロセッサのプログラム例 foo.cc
例 A–2 -E オプションを使用したときの foo.cc のプリプロセッサ出力
警告テンプレートを使用する場合は、このオプションの結果を C++ コンパイラの入力に使用することはできません。 関連項目-P A.2.14 +e{0|1}互換モード (-compat[=4]) のときに仮想テーブルの生成を制御します。標準モード (デフォルトモード) のときには無効な指定として無視されます。 A.2.14.1 値+e オプションには次の値を指定できます。
相互の関連性このオプションを使用してコンパイルする場合は、-features=no%except オプションも使用してください。使用しなかった場合は、例外処理で使用される内部型の仮想テーブルがコンパイラによって生成されます。 テンプレートクラスに仮想関数があると、コンパイラで必要な仮想テーブルがすべて生成され、しかもこれらのテーブルが複写されないようにすることができない場合があります。 関連項目『C++ 移行ガイド』 A.2.15 -erroff[= t]このコマンドは、C++ コンパイラの警告メッセージを無効にします。エラーメッセージには影響しません。このオプションは、-errwarn でゼロ以外の終了状態を発生させるように指定されているかどうかにかかわらず、すべての警告メッセージに適用されます。 A.2.15.1 値t には、次の 1 つまたは複数の項目をコンマで区切って指定します。<タグ>、no%<タグ>、 %all、%none。指定順序によって実行内容が異なります。たとえば、「%all,no%<タグ>」と指定すると、<タグ> 以外のすべての警告メッセージを抑制します。次の表は、-erroff の値を示しています。 表 A–3 -erroff の値
デフォルトデフォルトは -erroff=%none です。-erroff と指定すると、-erroff=%all を指定した場合と同じ結果が得られます。 例たとえば、-erroff=tag は、この tag が示す警告メッセージを抑止します。一方、-erroff=%all,no%tag は、tag が示すメッセージ以外の警告メッセージをすべて抑止します。 警告メッセージのタグを表示するには、-errtags=yes オプションを使用します。 警告-erroff オプションで無効にできるのは、C++ コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。 関連項目-errtags、-errwarn A.2.16 -errtags[= a]C++ コンパイラの フロントエンドで出力される警告メッセージのうち、-erroff オプションで無効にできる、または -errwarn オプションで重大な警告に変換できるメッセージのメッセージタグを表示します。 A.2.16.1 値とデフォルトa には、yes または no を指定します。デフォルトは -errtags=no です。-errtags だけを指定すると、-errtags=yes を指定するのと同じことになります。 警告C++ コンパイラのドライバおよび C のコンパイルシステムのほかのコンポーネントから出力されるメッセージにはエラータグが含まれないため、-erroff で無効にしたり、-errwarn で重大なエラーに変換したりすることはできません。 関連項目-erroff、-errwarn A.2.17 -errwarn[= t]指定した警告メッセージが生成された場合に、重大なエラーを出力して C++ コンパイラを終了する場合は、 -errwarn を使用します。 A.2.17.1 値t には、次の 1 つまたは複数の項目をコンマで区切って指定します。<タグ>、no%<タグ>、 %all、%none。このとき、順序が重要になります。たとえば、%all,no%<タグ> と指定すると、<タグ> 以外のすべての警告メッセージが生成された場合に、重大なエラーを出力して cc を終了します。 -errwarn の値を次の表に示します。 表 A–4 -errwarn の値
デフォルトデフォルトは、-errwarn=%none です。-errwarn だけを指定した場合、-errwarn=%all と指定したことと同じになります。 警告-errwarn オプションを使用して、障害状態で C++ コンパイラを終了するように指定できるのは、C++ コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。 C++ コンパイラで生成される警告メッセージは、コンパイラのエラーチェックの改善や機能追加に応じて、リリースごとに変更されます。-errwarn=%all を指定してエラーなしでコンパイルされるコードでも、コンパイラの次期リリースではエラーを出力してコンパイルされる可能性があります。 関連項目-erroff、-errtags A.2.18 -fastこのオプションは、 実行ファイルの実行時のパフォーマンスのチューニングで効果的に使用することができるマクロです。-fast は、コンパイラのリリースによって変更される可能性があるマクロで、ターゲットのプラットフォーム固有のオプションに展開されます。-# オプションまたは -xdryrun を使用して -fast の展開を調べ、-fast の該当するオプションを使用して実行可能ファイルのチューニングを行なってください。 このオプションは、コードをコンパイルするマシン上でコンパイラオプションの最適な組み合わせを選択して実行速度を向上するマクロです。 A.2.18.1 拡張このオプションは、次のコンパイラオプションを組み合わせて、多くのアプリケーションのパフォーマンスをほぼ最大にします。 表 A–5 -fast の拡張
相互の関連性-fast マクロから展開されるコンパイラオプションが、指定されたほかのオプションに影響を与えることがあります。たとえば、次のコマンドの -fast マクロの展開には -xtarget=native が含まれています。そのため、ターゲットのアーキテクチャーは -xarch に指定された SPARC-V9 ではなく、32 ビットアーキテクチャーのものに戻されます。 誤
正
個々の相互の関連性については、各オプションの説明を参照してください。 このコード生成オプション、最適化レベル、組み込み関数の最適化、インラインテンプレートファイルの使用よりも、そのあとで指定するフラグの方が優先されます (例を参照)。ユーザーの指定した最適化レベルは、以前に設定された最適化レベルを無効にします。 -fast オプションには -fns -ftrap=%none が含まれているため、このオプションによってすべてのトラップが無効になります。 例次のコンパイラコマンドでは、最適化レベルは -x03 になります。
次のコンパイラコマンドでは、最適化レベルは -xO5 になります。
警告別々の手順でコンパイルしてリンクする場合は、-fast オプションをコンパイルコマンドとリンクコマンドの両方に表示する必要があります。 コンパイラで -fast オプションを指定すると、そのコードの移植性は失われます。たとえば、UltraSPARC-III システムで次のコマンドを指定すると、生成されるバイナリは UltraSPARC-II システムでは動作しません。
IEEE 標準の浮動小数点演算を使用しているプログラムには、-fast を指定しないでください。計算結果が違ったり、プログラムが途中で終了する、あるいは予期しない SIGFPE シグナルが発生する可能性があります。 以前のリリースの SPARC では、-fast マクロは -fsimple=1 に展開されました。現在では、-fsimple=2 に展開されます。 以前のリリースでは、-fast マクロは -xO4 に展開されました。現在では、-xO5 に展開されます。 注 – 以前の SPARC リリースでは -fast マクロに -fnonstd; が含まれていましたが、このリリースでは含まれていません。-fast では、非標準浮動小数点モードは初期化されません。『数値計算ガイド』と ieee_sun(3M) のマニュアルページを参照してください。 関連項目-fns、-fsimple、-ftrap=%none、-xlibmil、-nofstore、-xO5、-xlibmopt、-xtarget=native A.2.19 -features=a[ ,a...]コンマで区切って指定された C++ 言語のさまざまな機能を、有効または無効にします。 A.2.19.1 値互換モード (-compat[=4]) と標準モード (デフォルトのモード) の両方で、次の値の 1 つを指定できます。 表 A–6 互換モードと標準モードでの -features オプション
標準モード (デフォルトのモード) では、a にはさらに次の値の 1 つを指定できます。 表 A–7 標準モードだけに使用できる -features オプション
互換モード (-compat[=4]) では、a にはさらに次の値の 1 つを指定できます。 表 A–8 互換モードだけに使用できる -features オプション
注 – [no%]castop は、C++ 4.2 コンパイラ用に作成されたメイクファイルとの互換性を維持するために使用できますが、C++ 5.0、5.1、5.2、および 5.3 コンパイラには影響はありません。新しい書式の型変換 (const_cast、dynamic_cast、reinterpret_cast、static_cast) は常に認識され、無効にすることはできません。 デフォルト-features を指定しないと、次が使用されます。
相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 次の値の標準モードによる使用 (デフォルト) は、標準ライブラリやヘッダーと互換性がありません。
互換モード (-compat[=4]) では、+w オプションまたは +w2 オプションを指定しないかぎり、-features=transitions オプションは無効です。 警告-features=%all や -features=%none を使用するときは注意してください。機能群がコンパイラおよびパッチのリリースのたびに変わる可能性があります。その結果、予期しない動作になる可能があります。 -features=tmplife オプションを使用すると、プログラムの動作が変わる場合があります。プログラムが -features=tmplife オプションを指定してもしなくても動作するかどうかをテストする方法は、プログラムの移植性をテストする方法の 1 つです。 互換モード (-compt=4) の場合、デフォルトではコンパイラは -features=split_init と見なします。-features=%none オプションを使用してほかの機能を使用できないようにした場合は、代わりに -features=%none,split_init を使用して初期設定子の個別の関数への分割をまた有効にすることをお勧めします。 関連項目表 3–17 および『C++ 移行ガイド』 A.2.20 -filt[= filter[,filter...]]コンパイラによってリンカーとコンパイラのエラーメッセージに通常適用されるフィルタリングを制御します。 A.2.20.1 値filter は次の値のいずれかである必要があります。 表 A–9 -filt の値
デフォルト-filt オプションを指定しないで、または値を入れないで -filt を指定すると、コンパイラでは -filt=%all が使用されます。 例次の例では、このコードを -filt オプションでコンパイルしたときの影響を示します。
-filt オプションを指定しないでコードをコンパイルすると、コンパイラでは -filt=errors,names,returns,stdlib が使用され、標準出力が表示されます。
次のコマンドでは、C++ で符号化されたリンカー名の復号化が抑止され、C++ のリンカーエラーの説明が抑止されます。
次のコードについて考えてみましょう。
次は、-filt=no%stdlib を指定したときの出力です。
次は、-filt=stdlib を指定したときの出力です。
相互の関連性no%names を使用しても returns や no%returns に影響はありません。つまり、次のオプションは同じ効果を持ちます。
A.2.21 -flagsA.2.22 -fma[={none| fused}](SPARC) 浮動小数点の Fused Multiply-Add 命令の自動生成を有効にします。-fma=none を指定すると、これらの命令の生成を無効にします。-fma=fused を指定すると、コンパイラは浮動小数点の Fused Multiply-Add 命令を使用して、コードのパフォーマンスを改善する機会を検出しようとします。 デフォルトは -fma=none です。 コンパイラが Fused Multiply-Add 命令を生成するための最小要件は、-xarch=sparcfmaf と、最適化レベルが -xO2 以上であることです。Fused Multiply-Add 命令をサポートしていないプラットフォームでプログラムが 実行されないようにするため、コンパイラは Fused Multiply-Add 命令を生成する場合、バイナリプログラムにマーク付けをします。 A.2.23 -fnonstd浮動小数点オーバーフローのハードウェアによるトラップ、ゼロによる除算、無効演算の例外を有効にします。これらの結果は、SIGFPE シグナルに変換されます。 プログラムに SIGFPE ハンドラがない場合は、メモリーダンプを行なってプログラムを終了します (ただし、コアダンプのサイズをゼロに制限した場合を除きます)。 SPARC: さらに、-fnonstd は SPARC 非標準浮動小数点を選択します。 A.2.23.1 デフォルト-fnonstd を指定しないと、IEEE 754 浮動小数点演算例外が起きても、プログラムは異常終了しません。 アンダーフローは段階的です。 拡張x86: -fnonstd は -ftrap=common に拡張されます。 SPARC:-fnonstd は -fns -ftrap=common に拡張されます。 関連項目-fns、-ftrap=common、『数値計算ガイド』 A.2.24 -fns[={yes| no}]
A.2.24.1 値-fns オプションには次の値を指定できます。 表 A–10 -fns の値
デフォルト-fns を指定しないと、非標準浮動小数点モードは自動的には有効にされません。標準の IEEE 754 浮動小数点計算が行われます。 つまり、アンダーフローは段階的です。 -fns だけを指定すると、-fns=yes が使用されます。 例次の例では、-fast は複数のオプションに展開され、その中には -fns=yes (非標準浮動小数点モードを選択する) も含まれます。ところが、そのあとに続く -fns=no が初期設定を変更するので、結果的には、標準の浮動小数点モードが使用されます。
警告非標準モードが有効になっていると、浮動小数点演算によって、IEEE 754 規格の条件に合わない結果が出力されることがあります。 1 つのルーチンを -fns でコンパイルした場合は、そのプログラムのすべてのルーチンを -fns オプションでコンパイルする必要があります。そうしないと、予期しない結果が生じることがあります。 このオプションは、SPARC プラットフォームでメインプログラムをコンパイルするときしか有効ではありません。x86 プラットフォームでは、このオプションは無視されます。 -fns=yes (または -fns のみ) を使用したときに、通常は IEEE 浮動小数点トラップハンドラによって管理される浮動小数点エラーが発生すると、次のメッセージが返されることがあります。 関連項目『数値計算ガイド』、ieee_sun(3M) A.2.25 -fprecision=px86: デフォルト以外の浮動小数点精度モードを設定します。 -fprecision オプションを指定すると、FPU (Floating Point Unit) 制御ワードの丸め精度モードのビットが設定されます。これらのビットは、基本演算 (加算、減算、乗算、除算、平方根) の結果をどの精度に丸めるかを制御します。 A.2.25.1 値p は次のいずれかでなければいけません。 表 A–11 -fprecision の値
p が single か double であれば、丸め精度モードは、プログラムの実行が始まるときに、それぞれ single か double 精度に設定されます。p が extended であるか、-fprecision フラグが使用されていなければ、丸め精度モードは extended 精度のままです。 single 精度の丸めモードでは、結果が 24 ビットの有効桁に丸められます。 double 精度の丸めモードでは、結果が 53 ビットの有効桁に丸められます。デフォルトの extended 精度の丸めモードでは、結果が 64 ビットの有効桁に丸められます。このモードは、レジスタにある結果をどの精度に丸めるかを制御するだけであり、レジスタの値には影響を与えません。レジスタにあるすべての結果は、拡張倍精度形式の全範囲を使って丸められます。ただし、メモリーに格納される結果は、指定した形式の範囲と精度に合わせて丸められます。 float 型の公称精度は single です。long double 型の公称精度は extended です。 デフォルト-fprecision フラグを指定しないと、丸め精度モードは extended になります。 警告このオプションは、x86 プラットフォームでメインプログラムをコンパイルするときしか有効ではありません。SPARC プラットフォームでは、このオプションは無視されます。 A.2.26 -fround=r起動時に IEEE 丸めモードを有効にします。 このオプションは、次に示す IEEE 754 丸めモードを設定します。
内容は、ieee_flags サブルーチンと同じです。 これは実行時のモードを変更するために使用します。 A.2.26.1 値r には次の値のいずれかを指定します。 表 A–12 -fround の値
デフォルト-fround オプションを指定しないと、丸めモードは -fround=nearest になります。 警告1 つのルーチンを -fround=r でコンパイルした場合は、そのプログラムのすべてのルーチンを同じ -fround=r オプションでコンパイルする必要があります。 そうしないと、予期しない結果が生じることがあります。 このオプションは、メインプログラムをコンパイルするときにだけ有効です。 A.2.27 -fsimple[= n]このオプションで浮動小数点演算に影響する前提を設けることにより、オプティマイザで行う浮動小数点演算が簡略化されます。 A.2.27.1 値n を指定する場合、0、1、2 のいずれかにしなければいけません。 表 A–13 -fsimple の値
デフォルト-fsimple を指定しないと、-fsimple=0 が使用されます。 -fsimple を指定しても n の値を指定しないと、-fsimple=1 が使用されます。 相互の関連性-fast は -fsimple=2 を意味します。 警告このオプションによって、IEEE 754 に対する適合性が損なわれることがあります。 関連項目-fast 最適化が精度に与える影響の詳細は、『Techniques for Optimizing Applications:High Performance Computing』(Rajat Garg、Ilya Sharapov 共著) をお読みください。 A.2.28 -fstoreこのオプションを指定すると、コンパイラは、次の場合に浮動小数点の式や関数の値を代入式の左辺の型に変換します。つまり、その値はレジスタにそのままの型で残りません。
このオプションを解除するには、オプション -nofstore を使用してください。 A.2.28.1 警告丸めや切り捨てによって、結果がレジスタの値から生成される値と異なることがあります。 関連項目-nofstore A.2.29 -ftrap= t[,t...]起動時の IEEE トラップ モードを設定します。ただし、SIGFPE ハンドラは組み込まれません。トラップの設定と SIGFPE ハンドラの組み込みを同時に行うには、ieee_handler(3M) か fex_set_handling(3M) を使用します。複数の値を指定すると、それらの値は左から右に処理されます。 A.2.29.1 値t には次の値のいずれかを指定できます。 表 A–14 -ftrap の値
[no%] 形式のオプションは、下の例に示すように、%all や commonフラグの意味を変更するときだけ使用します。これは、特定のトラップを明示的に無効にするものではありません。 デフォルト-ftrap を指定しない場合、コンパイラは -ftrap=%none とみなします。 例-ftrap=%all,no%inexact は、inexact を除くすべてのトラップが設定されます。 警告1 つのルーチンを -ftrap=t オプションでコンパイルした場合は、そのプログラムのルーチンすべてを、-ftrap=t オプションを使用してコンパイルしてください。途中から異なるオプションを使用すると、予想に反した結果が生じることがあります。 -ftrap=inexact のトラップは慎重に使用してください。-ftrap=inexact では、浮動小数点の値が正確でないとトラップが発生します。たとえば、次の文ではこの条件が発生します。
このオプションは、メインプログラムをコンパイルするときにだけ有効です。このオプションを使用する際には注意してください。IEEE トラップを有効にするには -ftrap=common を使用してください。 関連項目ieee_handler(3M) および fex_set_handling(3M) のマニュアルページ A.2.30 -Gコマンド行で指定したソースファイルはすべて、デフォルトで -xcode=pic13 オプションでコンパイルされます。 テンプレートを使用する共有ライブラリを作成する場合は、通常、テンプレートデータベースでインスタンス化されているテンプレート関数を、共有ライブラリに組み込む必要があります。このオプションを使用すると、これらのテンプレートが必要に応じて共有ライブラリに自動的に追加されます。 コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションと -G オプションを組み合わせて共有ライブラリを作成した場合は、生成された共有オブジェクトとのリンクでも、必ず同じオプションを指定してください。 「A.2.116 -xcode=a」で推奨しているように、共有オブジェクトの作成では、-xarch=v9 を付けてコンパイルしたすべてのオブジェクトファイルもまた、明示的な -xcode 値を付けてコンパイルする必要があります。 A.2.30.1 相互の関連性-c (コンパイルのみのオプション) を指定しないと、次のオプションがリンカーに渡されます。
警告共有ライブラリの構築には、ld -G ではなく、CC -G を使用してください。こうすると、CC ドライバによって C++ に必要ないくつかのオプションが ld に自動的に渡されます。 -G オプションを使用すると、コンパイラはデフォルトの -l オプションを ld に渡しません。共有ライブラリを別の共有ライブラリに依存させる場合は、必要な -l オプションをコマンド行に渡す必要があります。たとえば、共有ライブラリを libCrun に依存させる場合は、-lCrun をコマンド行に渡す必要があります。 関連項目-dy、-Kpic、-xcode=pic13、-ztext、ld(1) のマニュアルページ、「16.3 動的 (共有) ライブラリの構築」 A.2.31 -gdbx(1) または Debugger によるデバッグおよびパフォーマンスアナライザ analyzer(1) による解析用のシンボルテーブル情報を追加生成します。 コンパイラとリンカーに、デバッグとパフォーマンス解析に備えてファイルとプログラムを用意するように指示します。 これには、次の処理が含まれています。
A.2.31.1 相互の関連性このオプションと -xOlevel (あるいは、同等の -O オプションなど) を一緒に使用した場合、デバッグ情報が限定されます。詳細は、「A.2.150 -xOlevel」を参照してください。 このオプションを使用するとき、最適化レベルが -xO4 以上の場合、可能なかぎりのシンボリック情報と最高の最適化が得られます。 このオプションを指定すると、+d オプションが自動的に指定されます。 注 – 以前のリリースでは、このオプションは、コンパイラのリンク専用の呼び出しにおいて、デフォルトで強制的にリンカー ( ld) ではなく、インクリメンタルリンカー ( ild) を使用するようにしていました。すなわち、-g が指定されたときのコンパイラは、そのデフォルトの動作として、コマンド行に -G またはソースファイルの指定がなくてもオブジェクトファイルのリンクで必ず、ld の代わりに ild を自動的に呼び出していました。現在、このようなことはありません。インクリメンタルリンカーは利用できなくなりました。 パフォーマンスアナライザの機能を最大限に利用するには、-g オプションを指定してコンパイルします。一部のパフォーマンス解析機能では、 -g オプションを必要としませんが、注釈付きのソース、一部の関数レベル情報、およびコンパイラの注釈メッセージを表示するには -g を指定してコンパイルする必要があります。詳細は、analyzer(1) のマニュアルページと『プログラムのパフォーマンス解析』を参照してください。 -g オプションで生成される注釈メッセージは、プログラムのコンパイル時にコンパイラが実行した最適化と変換について説明します。メッセージを表示するには、er_src(1) コマンドを使用します。これらのメッセージはソースコードでインタリーブされます。 警告プログラムを別々の手順でコンパイルしてリンクしてから、1 つの手順に -g オプションを取り込み、ほかの手順から -g オプションを除外すると、プログラムの正確さは損なわれませんが、プログラムをデバッグする機能には影響を与えます。-g (または -g0) でコンパイルされていなくて、-g (または -g0) とリンクされているモジュールは、デバッグ用に正しく作成されません。通常、main 関数の入っているモジュールをデバッグするには、-g オプション (または -g0 オプション) を付けてコンパイルする必要があります。 関連項目+d、-g0、-xs、analyzer(1)、および er_src(1)、ld(1) のマニュアルページ『dbx コマンドによるデバッグ』(スタブの詳細について) 『プログラムのパフォーマンス解析』 A.2.32 -g0デバッグ用のコンパイルとリンクを行いますが、インライン展開は行いません。 このオプションは、+d が無効になり、インライン化された関数に dbx がステップインできなくなることを除けば、-g と同じです。 -xO3 以下の最適化レベルで -g0 を指定すると、ほとんど完全な最適化と可能なかぎりのシンボル情報を取得することができます末尾呼び出しの最適化とバックエンドのインライン化は無効になります。 A.2.32.1 関連項目+d、-g、『dbx コマンドによるデバッグ』 A.2.33 -H現在のコンパイルに含まれている #include ファイルのパス名を標準エラー出力 (stderr) に 1 行に 1 つずつ出力します。 A.2.34 -h[ ]name生成する動的共有ライブラリ に名前 name を割り当てます。 これはローダー用のオプションで、ld に渡されます。通常、-h のあとに指定する name (名前) は、-o のあとに指定する名前と同じでなければいけません。-h と name の間には、空白文字を入れても入れなくてもかまいません。 コンパイルの時ローダーは、作成対象の共有動的ライブラリに、指定の名前を割り当てます。この名前は、ライブラリのイントリンシック名として、ライブラリファイルに記録されます。-hname (名前) オプションを指定しないと、イントリンシック名はライブラリファイルに記録されません。 実行可能ファイルはすべて、必要な共有ライブラリファイルのリストを持っています。実行時のリンカーは、ライブラリを実行可能ファイルにリンクするとき、ライブラリのイントリンシック名をこの共有ライブラリファイルのリストの中にコピーします。共有ライブラリにイントリンシック名がないと、リンカーは代わりにその共有ライブラリファイルのパス名を使用します。 A.2.34.1 例
A.2.35 -helpA.2.36 -Ipathname#include ファイル検索パスに pathname を追加します。 このオプションは、インクルードファイルの相対ファイル名 (スラッシュ以外の文字で始まるファイル名) リストに、pathname (パス名) を追加します。 コンパイラは、引用符付きのインクルードファイル (#include "foo.h" の形式) ファイルを次の順序で検索します。
コンパイラでは、山括弧をインクルードした (#include <foo.h> 形式の) ファイルを次の順序で検索します。
A.2.36.1 相互の関連性-I- オプションを指定すると、デフォルトの検索規則が無効になります。 -library=no%Cstd を指定すると、その検索パスに C++ 標準ライブラリに関連付けられたコンパイラで提供されるヘッダーファイルがコンパイラでインクルードされません。「12.7 C++ 標準ライブラリの置き換え」を参照してください。 -ptipath が使用されていないと、コンパイラは -Ipathname でテンプレートファイルを探します。 -ptipath の代わりに -Ipathname を使用します。 このオプションは、置き換えられる代わりに蓄積されます。 警告コンパイラがインストールされている位置の /usr/include、 /lib、/usr/lib を検索ディレクトリに指定しないでください。 関連項目-I- A.2.37 -I-インクルードファイルの検索規則を次のとおり変更します。 #include "foo.h" 形式のインクルードファイルの場合、次の順序でディレクトリを検索します。 1. -I オプションで指定されたディレクトリ内 (-I- の前後) 2. コンパイラで提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊な目的のファイルの include ディレクトリ 3. /usr/include ディレクトリ内 #include <foo.h> 形式のインクルードファイルの場合、次の順序でディレクトリを検索します。 1.-I のあとに指定した -I- オプションで指定したディレクトリ内 2. コンパイラで提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊な目的のファイルの include ディレクトリ 3. /usr/include ディレクトリ内 注 – インクルードファイルの名前が標準ヘッダーの名前と一致する場合は、「12.7.5 標準ヘッダーの実装」も参照してください。 A.2.37.1 例次の例は、prog.cc のコンパイル時に -I- を使用した結果を示します。
次のコマンドでは、#include "foo.h" 形式のインクルード文のカレントディレクトリ (インクルードしているファイルのディレクトリ) のデフォルトの検索動作を示します。#include "c.h" ステートメントを inc/a.h で処理するときは、コンパイラで inc サブディレクトリから c.h ヘッダーファイルがインクルードされます。#include "c.h" 文を prog.cc で処理するときは、コンパイラで prog.cc の入っているディレクトリから c.h ファイルがインクルードされます。-H オプションがインクルードファイルのパスを印刷するようにコンパイラに指示していることに注意してください。
次のコマンドでは、-I- オプションの影響を示します。コンパイラでは、#include "foo.h" 形式の文を処理するときにインクルードしているディレクトリを最初に探しません。その代わり、-I オプションで名前の付いたディレクトリをコマンド行に表示された順序で検索します。inc/a.h の #include "c.h" 文を処理するときは、コンパイラには inc/c.h ヘッダファイルの代わりに ./c.h ヘッダファイルがインクルードされます。
相互の関連性-I- がコマンド行に表示されると、コンパイラではディレクトリが -I 指示に明示的に表示されていないかぎり決してカレントディレクトリを検索しません。この影響は #include "foo.h" 形式のインクルード文にも及びます。 警告コマンド行の最初の -I- だけが、説明した動作を引き起こします。 コンパイラがインストールされている位置の /usr/include、 /lib、/usr/lib を検索ディレクトリに指定しないでください。 A.2.38 -iリンカー ld は LD_LIBRARY_PATH の設定を無視します。 A.2.39 -inlineA.2.40 -instances=aA.2.40.1 値a には次のいずれかを指定します。 表 A–15 -instances の値
デフォルト-instances を指定しないと、-instances=global が使用されます。 関連項目A.2.41 -instlib=filenameこのオプションを使用すると、ライブラリ (共有、静的) と現在のオブジェクトで重複するテンプレートインスタンスの生成が禁止されます。一般に、ライブラリを使用するプログラムが多数のインスタンスを共有する場合、-instlib=filename を指定して、コンパイル時間の短縮を試みることができます。 A.2.41.1 値既存のテンプレートインスタンスが入っていることがわかっているライブラリを指定するには、filename 引数を使用します。ファイル名引数には、スラッシュ (/) 文字を含める必要があります。現在のディレクトリを基準とする相対パスの場合には、ドット・スラッシュ (./) を使用します。 デフォルト-instlib=filename オプションにはデフォルト値はないので、値を指定する場合にのみ使用します。このオプションは複数回指定でき、指定内容は追加されていきます。 例libfoo.a ライブラリと libbar.so ライブラリが、ソースファイル a.cc と共有する多数のテンプレートインスタンスをインスタンス化すると仮定します。-instlib=filename を追加してライブラリを指定すると、冗長性が回避されコンパイル時間を短縮できます。 example% CC -c -instlib=./libfoo.a -instlib=./libbar.so a.cc 相互作用-g を使ってコンパイルするとき、-instlib=file で指定したライブラリが -g でコンパイルされていない場合には、テンプレートインスタンスがデバッグ不能となります。この問題の対策としては、-g を指定するときに -instlib=file を使用しないようにします。 警告-instlib によってライブラリを指定する場合には、そのライブラリとのリンクを行う必要があります。 関連項目-template、-instances、-pti A.2.42 -KPICx86: -Kpic と同じです。 このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。 A.2.43 -Kpicx86: 位置に依存しないコードを使ってコンパイルします。 このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。 A.2.44 -keeptmpコンパイル中に作成されたすべての一時ファイルを残します。 このオプションを -verbose=diags と一緒に使用すると、デバッグに便利です。 A.2.44.1 関連項目-v、-verbose A.2.45 -Lpathライブラリを検索するディレクトリに、path ディレクトリを追加します。 このオプションは ld に渡されます。コンパイラが提供するディレクトリよりも path が先に検索されます。 A.2.45.1 相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 警告コンパイラがインストールされている位置の /usr/include、 /lib、/usr/lib を検索ディレクトリに指定しないでください。 A.2.46 -llibライブラリ liblib.a または liblib.so をリンカーの検索ライブラリに追加します。 このオプションは ld に渡されます。通常のライブラリは、名前が liblib.a か liblib.so の形式です (lib と .a または .so の部分は必須です)。このオプションでは lib の部分を指定できます。コマンド行には、ライブラリをいくつでも指定できます。 指定したライブラリは、-Ldir で指定された順に検索されます。 -llib オプションはファイル名のあとに指定してください。 A.2.46.1 相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 正しい順序でライブラリが検索されるようにするには、安全のため、必ずソースとオブジェクトのあとに -lx を使用してください。 警告libthread とリンクする場合は、ライブラリを正しい順序でリンクするために -lthread ではなく -mt を使用してください。 関連項目-Ldir、-mt、「11.4.8 アプリケーションの例」、『 Tools.h++ クラスライブラリ・リファレンスマニュアル』 A.2.47 -libmieeeA.2.48 -libmilA.2.49 -library=l[ ,l...]l に指定した、CC が提供するライブラリを、コンパイルとリンクに組み込みます。 A.2.49.1 値互換モード (-compat[-4]]) の場合、l には次のいずれかを指定します。 表 A–16 互換モードに使用できる -library オプション
標準モード (デフォルトモード) の場合、l には次のいずれかを指定します。 表 A–17 標準モードに使用できる -library オプション
デフォルト
例標準モードで libCrun 以外の C++ ライブラリを除外してリンクするには、次のコマンドを使用します。
標準モードで従来の iosttream と RogueWave tools.h++ ライブラリを使用するには、次のコマンドを使用します。
標準モードで標準 の iostream と Rogue Wave tools.h++ ライブラリを使用するコマンドは次のとおりです。
互換モードで従来の iostream と Rogue Wave tools.h++ ライブラリを使用するコマンドは次のとおりです。
相互の関連性-library でライブラリを指定すると、適切な -I パスがコンパイルで設定されます。リンクでは、適切な -L、-Y P、および -R パスと、-l オプションが設定されます。 このオプションは、置き換えられる代わりに蓄積されます。 区間演算ライブラリを使用するときは、libC、libCstd、または libiostream のいずれかのライブラリを取り込む必要があります。 -library オプションを使用すると、指定したライブラリに対する -l オプションが正しい順序で送信されるようになります。たとえば、-library=rwtools7,iostream および -lirabary=iostream,rwtools7 のどちらでも、-l オプションは、-lrwtool -liostream の順序で ld に渡されます。 指定したライブラリは、システムサポートライブラリよりも前にリンクされます。 -library=sunperf と -xlic_lib=sunperf は同じコマンド行で使用できません。 -library=stlport4 と -library=Cstd を同一のコマンド行で使用できません。 同時に使用できる RogueWave ツールライブラリは 1 つだけです。 また、-library=stlport4 を指定して RogueWave ツールライブラリと併用することはできません。 従来 の iostream RogueWave ツールライブラリを標準モード (デフォルトモード) で取り込む場合は、libiostream も取り込む必要があります (詳細は、『C++ 移行ガイド』を参照してください)。標 準 iostream RogueWave ツールライブラリは、標準モードでのみ使用できます。次のコマンド例は、RogueWave tools.h++ ライブラリオプションの有効もしくは無効な使用法について示します。
libCstd と libiostream の両方を含めた場合は、プログラム内で新旧両方の形式の iostream (例: cout と std::cout) を使用して、同じファイルにアクセスしないよう注意してください。同じプログラム内に標準 iostream と従来の iostream が混在し、その両方のコードから同じファイルにアクセスすると、問題が発生する可能性があります。 libC とも libCrun ともリンクしないプログラムは、C++ のすべての機能を使用できないことがあります。 -xnolib を指定すると、-library は無視されます。 警告別々の手順でコンパイルしてリンクする場合は、コンパイルコマンドに表示される一連の -library オプションをリンクコマンドにも表示する必要があります。 stlport4、Cstd、および iostream のライブラリは、固有の入出力ストリームを実装しています。これらのライブラリの 2 個以上を-library オプションを使って指定した場合、プログラム動作が予期しないものになる恐れがあります。STLport の実装の詳細は、「13.3 STLport」を参照してください。 これらのライブラリは安定したものではなく、リリースによって変わることがあります。 関連項目-I、-l、-R、-staticlib、-xia、-xlang、-xnolib、「11.4.8 アプリケーションの例」、「警告:」、「13.3.1 再配布とサポートされる STLport ライブラリ」、「2.7.3.3 標準ライブラリヘッダーファイルに対する make の使用」、『Tools.h++ ユーザーズガイド』、『Tools.h++ クラスライブラリ・リファレンスマニュアル』、『Standard C++ Class Library Reference』(英語版のみ)、『 C++ Interval Arithmetic Programming Reference』(英語版のみ) -library=no%cstd オプションを使用して、ユーザー独自の C++ 標準ライブラリの使用を有効にする方法については、「12.7 C++ 標準ライブラリの置き換え」を参照してください。 A.2.50 -m32|-m64コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。 -m32 を使用すると、32 ビット実行可能ファイルと共有ライブラリが作成されます。-m64 を使用すると、64 ビット実行可能ファイルと共有ライブラリが作成されます。 ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は 64 ビット対応ではないすべての Solaris プラットフォームおよび Linux プラットフォームのデフォルトです。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は 64 ビット対応の Linux プラットフォームのデフォルトです。-m64 は LP64 モデル対応のプラットフォームでのみ使用できます。 -m32 を使用してコンパイルされたオブジェクトファイルまたはライブラリを、-m64 を使用してコンパイルされたオブジェクトファイルまたはライブラリにリンクすることはできません。 大量の静的データを持つアプリケーションを -m64 を使用してコンパイルするときは、-xmodel=medium も必要になることがあります。Linux プラットフォームの中には、ミディアムモデルをサポートしていないものがあります。 以前のコンパイラリリースでは、-xarch で命令セットを選択すると、メモリーモデル ILP32 または LP64 が使用されていました。Sun Studio 12 コンパイラからは、このようなことがなくなりました。ほとんどのプラットフォームでは、-m64 をコマンド行に追加するだけで、64 ビットオブジェクトが作成されます。 Solaris では、-m32 がデフォルトです。64 ビットプログラムをサポートする Linux システムでは、-m64 -xarch=sse2 がデフォルトです。 -xarch も参照してください。 A.2.51 -mcオブジェクトファイルの .comment セクションから重複文字列を削除します。文字列に空白が含まれている場合は、文字列を引用符で囲む必要があります。-mc オプションを使用すると、mcs -c コマンドが呼び出されます。 A.2.52 -migration以前のバージョンのコンパイラ用に作成されたソースコードの移行に関する情報の参照先を表示します。 注 – このオプションは次のリリースでは存在しなくなる可能性があります。 A.2.53 -misalignSPARC: 通常はエラーになる、メモリー中の境界整列の誤ったデータを許可します。次に例を示します。
このオプションは、プログラムの中に正しく境界整列されていないデータがあることをコンパイラに知らせます。したがって、境界整列が正しくない可能性があるデータに対しては、ロードやストアを非常に慎重に、つまり 1 度に 1 バイトずつ行う必要があります。このオプションを使用すると、実行速度が大幅に低下することがあります。低下する程度はアプリケーションによって異なります。 A.2.53.1 相互の関連性SPARC プラットフォーム上で #pragma pack を使用して、型のデフォルトの境界整列よりも密に配置するには、アプリケーションのコンパイルとリンクの両方で -misalign オプションを指定する必要があります。 境界整列が正しくないデータは、実行時に ld のトラップ機構によって処理されます。misalign オプションとともに最適化フラグ (-xO{1|2|3|4|5} またはそれと同等のフラグ) を使用すると、ファイル境界整列の正しくないデータを正しい境界に整列に合わせるための命令がオブジェクトに挿入されます。この場合には、実行時不正境界整列トラップは生成されません。 警告できれば、プログラムの境界整列が正しい部分と境界整列が誤った部分をリンクしないでください。 コンパイルとリンクを別々に行う場合は、-misalign オプションをコンパイルコマンドとリンクコマンドの両方で指定する必要があります。 A.2.54 -mr[, <文字列>]オブジェクトファイルの .comment セクションからすべての文字列を削除します。string が与えられた場合、そのセクションに string を埋め込みます。文字列に空白が含まれている場合は、文字列を引用符で囲む必要があります。このオプションを使用すると、mcs -d [-a string] が呼び出されます。 A.2.54.1 相互の関連性このオプションは、-S、-xsbfast、または -sbfast が指定されると無効になります。 A.2.55 -mtマルチスレッド化したコードのコンパイルとリンクを行います。 このオプションを付けると、-D_REENTRANT がプリプロセッサに渡され、-lthread が ld に正しい順番で渡されます。 アプリケーションやライブラリがマルチスレッド化されている場合は、-mt オプションが必要です。 libthread とリンクする場合には、-lthread ではなく -mt オプションを使用してライブラリのリンク順序が正しくなるようにしてください。 POSIX スレッドを使用する場合は、-mt -lpthread オプションを使ってリンクする必要があります。-mt オプションが必要な理由は、libC (互換モード) と libCrun (標準モード) がマルチスレッド対応のアプリケーションに対して libthread を必要とするためです。 コンパイルとリンクを別々に実行する場合で、コンパイルで -mt を使用した場合は、予期しない結果が発生することがあります。1 つの翻訳単位を -mt を使用してコンパイルする場合は、プログラムのすべての単位を -mt を使用してコンパイルしてください。 並列の Fortran オブジェクトを C++ オブジェクトと混合している場合は、リンク行に -mt オプションを指定する必要があります。 A.2.55.1 警告libthread とリンクする場合には、-lthread ではなく -mt オプションを使用してライブラリのリンク順序が正しくなるようにしてください。 POSIX スレッドを使用する場合は、-mt オプションと -lpthread オプションを使ってリンクする必要があります。-mt オプションが必要な理由は、libCrun (標準モード) と libC (互換モード) がマルチスレッド対応のアプリケーションに対して libthread を必要とするためです。 コンパイルとリンクを別々に実行する場合で、コンパイルで -mt を使用した場合は、次の例に示すようにリンクでも -mt を使用してください。 そうしないと、予期しない結果が発生する可能性があります。
並列の Fortran オブジェクトを C++ オブジェクトと混合している場合は、リンク行に -mt オプションを指定する必要があります。 C99 サポートは互換モード (-compat=4) で使用できません。 関連項目-xnolib、「10.5 メンバー変数のキャッシュ」、『マルチスレッドのプログラミング』、『リンカーとライブラリ』 A.2.56 -native-xtarget=native と同じです。 A.2.57 -noexA.2.58 -nofstoreこのオプションを指定すると、次のどちらの場合でも、コンパイラは浮動小数点の式や関数の値を代入式の左辺の型に変換しません。 つまり、レジスタの値はそのままです。
A.2.58.1 関連項目-fstore A.2.59 -nolibA.2.60 -nolibmilA.2.61 -noqueueライセンスを確保できない場合、コンパイラはコンパイル要求を待ち行列に入れず、コンパイルもしないで終了します。メイクファイルのテストには、ゼロ以外の状態が返されます。 A.2.62 -norunpath実行可能ファイルに共有ライブラリへの実行時検索パスを組み込みません。 実行可能ファイルが共有ライブラリを使用する場合、コンパイラは通常、実行時のリンカーに対して共有ライブラリの場所を伝えるために構築を行なったパス名を知らせます。これは、ld に対して -R オプションを渡すことによって行われます。このパスはコンパイラのインストール先によって決まります。 このオプションは、プログラムで使用される共有ライブラリへのパスが異なる顧客に出荷される実行可能ファイルの構築にお勧めします。 A.2.62.1 相互の関連性共有ライブラリをコンパイラのインストールされている位置 (デフォルトのインストール先は /opt/SUNWspro/lib) で使用し、かつ -norunpath を使用する場合は、リンク時に -R オプションを使うか、または実行時に環境変数 LD_LIBRARY_PATH を設定して共有ライブラリの位置を明示しなければいけません。そうすることにより、実行時リンカーはその共有ライブラリを見つけることができます。 A.2.63 -Oこのリリースから、-O マクロは、-xO2 でなく、-xO3 に展開されます。 このデフォルトの変更によって、実行時のパフォーマンスが向上します。ただし、あらゆる変数を自動的に volatile と見なすことを前提にするプログラムの場合、 -x03 は不適切なことがあります。このことを前提とする代表的なプログラムとしては、専用の同期方式を実装するデバイスドライバや古いマルチスレッドアプリケーションがあります。回避策は、-O ではなく、-xO2 を使ってコンパイルすることです。 A.2.64 -OlevelA.2.65 -o filename出力ファイルまたは実行可能ファイルの名前を filename (ファイル名) に指定します。 A.2.65.1 相互の関連性コンパイラは、テンプレートインスタンスを格納する必要がある場合には、出力ファイルのディレクトリにあるテンプレートリポジトリに格納します。たとえば、次のコマンドでは、コンパイラはオブジェクトファイルを ./sub/a.o に、テンプレートインスタンスを ./sub/SunWS_cache 内のリポジトリにそれぞれ書き込みます。
コンパイラは、読み込むオブジェクトファイルに対応するテンプレートリポジトリからテンプレートインスタンスを読み取ります。たとえば、次のコマンドでは、コンパイラは ./sub1/SunWS_Cache と ./sub2/SunWS_cache から読み取り、必要な場合は ./SunWS_cache に書き込みます。
詳細は、「7.4 テンプレートリポジトリ」を参照してください。 警告このファイル名には、コンパイラが作成するファイルの型に合った接尾辞を指定してください。また、CC ドライバはソースファイルには上書きしないため、ソースファイルとは異なるファイルを指定する必要があります。 A.2.66 +pA.2.66.1 デフォルト+p を指定しないと、コンパイラは非標準のプリプロセッサの表明を認識します。 相互の関連性+p を指定している場合は、次のマクロは定義されません。
A.2.67 -Pソースの前処理だけでコンパイルはしません (接尾辞 .i のファイルを出力します)。 このオプションを指定すると、プリプロセッサが出力するような行番号情報はファイルに出力されません。 A.2.67.1 関連項目-E A.2.68 -p廃止。「A.2.157 -xpg」を参照してください。 A.2.69 -pentiumx86: -xtarget=pentium と置き換えられています。 A.2.70 -pgA.2.71 -PICx86: -Kpic と同じです。 A.2.72 -picSPARC: -xcode=pic13 と同じです。 x86: -Kpic と同じです。 A.2.73 -pta-template=wholeclass と同じです。 A.2.74 -ptipathテンプレートソース用の検索ディレクトリを追加指定します。 このオプションは -Ipathname (パス名) によって設定された通常の検索パスに代わるものです。-ptipath (パス) フラグを使用した場合、コンパイラはこのパス上にあるテンプレート定義ファイルを検索し、-Ipathname フラグを無視します。 -ptipath よりも -Ipathname を使用すると混乱が起きにくくなります。 A.2.74.1 相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 関連項目-Ipathname A.2.75 -pto-instances=static と同じです。 A.2.76 -ptrこのオプションは廃止されたため、コンパイル時には無視されます。 A.2.76.1 警告-ptr オプションは存在しても無視されますが、すべてのコンパイルコマンドから削除するようにしてください。これは将来のリリースで、-ptr が以前とは異なる動作のオプションとして再実装される可能性があるためです。 関連項目リポジトリのディレクトリについては、「7.4 テンプレートリポジトリ」を参照してください。 A.2.77 -ptv-verbose=template と同じです。 A.2.78 -Qoption phase option[,option…]option (オプション) を phase (コンパイル段階) に渡します。 複数のオプションを渡すには、コンマで区切って指定します。-Q を使ってコンポーネントに渡すオプションの順序を変更することができます。ドライバが認識するオプションは、正しい順序に保持されます。ドライバがすでに認識しているオプションに、-Q は使わないでください。たとえば C++ コンパイラは、リンカー (ld) に対する -z オプションを認識します。次のようなコマンドを実行したとします。 CC -G -zallextract mylib.a -zdefaultextract ... // 正しい -z オプションは、この順序でリンカーに渡されます。一方、次のようなコマンドを指定したとします。 CC -G -Qoption ld -zallextract mylib.a -Qoption ld -zdefaultextract ... // 誤り -z オプションの順序が変わり、不正な結果が生じる可能性があります。 A.2.78.1 値phase には、次の値のいずれか 1 つを指定します。 表 A–18 -Qoption の値
例次に示すコマンド行では、ld が CC ドライバによって起動されたとき、-Qoption で指定されたオプションの -i と -m が ld に渡されます。
警告意図しない結果にならないように注意してください。次に例を示します。
しかしこの指定は、意図に反して次のように解釈されてしまいます。
正しい指定は次のとおりです。
A.2.79 -qoption phase option-Qoption と同じです。 A.2.80 -qpA.2.81 -Qproduce sourcetypeCC ドライバに sourcetype (ソースタイプ) 型のソースコードを生成するよう指示します。 sourcetype に指定する接尾辞の定義は次のとおりです。 表 A–19 -Qproduce の値
A.2.82 -qproduce sourcetype-Qproduce と同じです。 A.2.83 -Rpathname[ :pathname…]動的ライブラリの検索パスを実行可能ファイルに組み込みます。 このオプションは ld に渡されます。 A.2.83.1 デフォルト-R オプションを指定しないと、出力オブジェクトに記録され、実行時リンカーに渡されるライブラリ検索パスは、-xarch オプションで指定されたターゲットアーキテクチャー命令によって異なります (-xarch を指定しないと、-xarch=generic が使用されます)。
標準インストールでは、install-directory は /opt です。 相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 LD_RUN_PATH 環境変数が設定されている場合に、-R オプションを指定すると、-R に指定したパスが検索され、LD_RUN_PATH のパスは無視されます。 関連項目-norunpath、『リンカーとライブラリ』 A.2.84 -readmeA.2.85 -Sコンパイルしてアセンブリコードだけを生成します。 CC ドライバはプログラムをコンパイルして、アセンブリソースファイルを作成します。 しかし、プログラムのアセンブルは行いません。このアセンブリソースファイル名には、.s という接尾辞が付きます。 A.2.86 -s出力する実行可能ファイルからシンボリック情報をすべて削除します。このオプションは ld に渡されます。 A.2.87 -sbA.2.88 -sbfastA.2.89 -staticlib=l[ ,l…]-library オプションで指定されている C++ ライブラリ (そのデフォルトも含む)、-xlang オプションで指定されているライブラリ、-xia オプションで指定されているライブラリのうち、どのライブラリが静的にリンクされるかを指定します。 A.2.89.1 値l には、次の値のいずれか 1 つを指定します。 表 A–20 -staticlib の値
デフォルト-staticlib を指定しないと、-staticlib=%none が使用されます。 例-library のデフォルト値は Crun であるため、次のコマンド行は、libCrun を静的にリンクします。
これに対し、次のコマンド行は libgc をリンクしません。これは、-library オプションで明示的に指定しないかぎり、libgc はリンクされないためです。
libgc を静的にリンクするには、次のコマンドを使用します。
次のコマンドは、librwtool ライブラリを動的にリンクします。librwtool はデフォルトのライブラリでもなく、-library オプションでも選択されていないため、-staticlib の影響はありません。
次のコマンドは、librwtool ライブラリを静的にリンクします。
次のコマンドは、Sun Performance Library を動的にリンクします。これは、-staticlib オプションを Sun Performance Library のライブラリのリンクに反映させるために -library=sunperf を -staticlib=sunperf に関連させて使用する必要があるからです。
相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 -staticlib オプションは、-xia、-xlang および -library オプションで明示的に選択された C++ ライブラリ、または、デフォルトで暗黙的に選択された C++ ライブラリだけに機能します。互換モードでは (-compat=[4])、libC がデフォルトで選択されます。標準モードでは (デフォルトのモード)、Cstd と Crun がデフォルトで選択されます。 -xarch=v9、-xarch=v9a、-xarch=v9b のいずれか、あるいは、64 ビットアーキテクチャーのオプションと同等のオプションを使用する場合、静的ライブラリとしては使用できない C++ ライブラリがあります。 警告library に使用できる値は安定したものではないため、リリースによって変わることがあります。 -xarch=v9、-xarch=v9a、-xarch=v9b のいずれか、あるいは、64 ビットアーキテクチャーのオプションと同等のオプションを使用する場合、静的ライブラリとしては使用できない C++ ライブラリがあります。 64 ビット Solaris x86 プラットフォームでは、-staticlib=Crun および -staticlib=Cstd オプションは機能しません。どのプラットフォームであれ、これらのライブラリを静的にリンクすることは推奨しません。静的リンクすることによって、プログラムが機能しなくなることがあります。 関連項目-library、「12.5 標準ライブラリの静的リンク」 A.2.90 -sync_stdio=[yes| no]C++ の iostream と C の stdio の同期が原因で実行時のパフォーマンスが低下する場合は、このオプションを使用してください。同期が必要なのは、同じプログラム内で iostream を使って cout に書き込み、stdio を使って stdout に書き込みを行う場合だけです。C++ 規格では同期が求められており、このため C++ コンパイラはデフォルトで同期を有効にします。ただし、しばしば、アプリケーションのパフォーマンスは同期なしの方が良くなることがあります。cout と stdout の一方にしか書き込みを行わない場合は、-sync_stdio=no オプションを使って同期を無効にすることができます。 A.2.90.1 デフォルト-sync_stdio を指定しなかった場合は、-sync_stdio=yes が設定されます。 例次の例について考えてみましょう。
同期が有効な場合は、1 行だけ出力されます。
同期なしの場合、出力が混乱します。 警告このオプションは、ライブラリではなく実行可能ファイルのリンクでのみ有効です。 A.2.91 -temp=path一時ファイルのディレクトリを定義します。 コンパイル中に生成される一時ファイルを格納するディレクトリのパス名を指定します。 A.2.91.1 関連項目-keeptmp A.2.92 -template=opt[ ,opt…]A.2.92.1 値opt は次のいずれかの値である必要があります。 表 A–21 -template の値
デフォルト-template オプションを指定しないと、-template=no%wholeclass,extdef が使用されます。 例次のコードについて考えてみましょう。
-template=geninlinefuncs を指定した場合、S の 2 つのメンバー関数は、プログラム内で呼び出されなくてもオブジェクトファイルに生成されます。
関連項目「7.2.2 全クラスインスタンス化」、「7.5 テンプレート定義の検索」 A.2.93 -timeA.2.94 -Unameこのオプションは、コマンド行に指定された (CC ドライバによって暗黙的に挿入され るものも含む) -D オプションによって作成されるマクロシンボル name の初期定義を削除します。ほかの定義済みマクロや、ソースファイル内のマクロ定義が影響を受けることはありません。 CC ドライバにより定義される -D オプションを表示するには、コマンド行に -dryrun オプションを追加します。 A.2.94.1 例次のコマンドでは、事前に定義されているシンボル __sun を未定義にします。#ifdef (__sun) のような foo.cc 中のプリプロセッサ文では、シンボルが未定義であると検出されます。
相互の関連性コマンド行には複数の -U オプションを指定できます。 すべての -U オプションは、存在している任意の -D オプションのあとに処理されます。つまり、同じ name がコマンド行上の -D と -U の両方に指定されている場合は、オプションが表示される順序にかかわらず name は未定義になります。 関連項目-D A.2.95 -unroll=nA.2.96 -V-verbose=version と同じです。 A.2.97 -vA.2.98 -vdelx非推奨。使用しないでください。 delete[] を使用する式に対し、実行時ライブラリ関数 _vector_delete_ の呼び出しを生成する代わりに _vector_deletex_ の呼び出しを生成します。関数 _vector_delete_ は、削除するポインタおよび各配列要素のサイズという 2 つの引数をとります。 関数 _vector_deletex_ は _vector_delete_ と同じように動作しますが、3 つ目の引数としてそのクラスのデストラクタのアドレスをとります。この引数は Sun 以外のベンダーが使用するためのもので、関数では使用しません。 A.2.98.1 デフォルトコンパイラは、delete[] を使用する式に対して _vector_delete_ の呼び出しを生成します。 警告これは旧式フラグであり、将来のリリースでは削除されます。Sun 以外のベンダーからソフトウェアを購入し、ベンダーがこのフラグの使用を推奨していないかぎり、このオプションは使用しないでください。 A.2.99 -verbose=v[ ,v…]A.2.99.1 値v には、次に示す値の 1 つを指定します。 表 A–22 -verbose の値
デフォルト-verbose を指定しないと、-verbose=%none が使用されます。 相互の関連性このオプションは、置き換えられる代わりに蓄積されます。 A.2.100 +w意図しない結果が生じる可能性のあるコードを特定します。+w オプションは、関数が大きすぎてインライン化できない場合、および宣言されたプログラム要素が未使用の場合に警告を生成しません。これらの警告は、ソース中の実際の問題を特定するものではないため、開発環境によっては不適切です。そのような環境では、+w でこれらの警告を生成しないようにすることで、+w をより効果的に使用することができます。これらの警告は、+w2 オプションの場合は生成されます。 次のような問題のありそうな構造について、追加の警告を生成します。
A.2.100.1 デフォルトこのオプションを指定しないと、コンパイラは必ず問題となる構造についてのみ警告を出力します。 相互の関連性+w を指定してコンパイルすると、一部の C++ 標準ヘッダに関する警告が発行されます。 関連項目-w、+w2 A.2.101 +w2+w で発行される警告に加えて、技術的な違反についての警告を発行します。これは、危険性はないが、プログラムの移植性を損なう可能性がある違反に対するものです。 +w2 オプションは、システムのヘッダーファイル中で実装に依存する構造が使用されている場合をレポートしなくなりました。システムヘッダーファイルが実装であるため、これらの警告は不適切でした。+w2 でこれらの警告を生成しないようにすることで、+w2 をより効果的に使用することができます。 A.2.101.1 警告+w2 を指定してコンパイルすると、Solaris および C++ 標準ヘッダーファイルに関する警告が発行されることがあります。 関連項目+w A.2.102 -wコンパイラが出す警告を出力しません。ただし、一部の警告、特に旧式の構文に関する重要な警告は抑制できません。 A.2.102.1 関連項目+w A.2.103 -Xm-features=iddollar と同じです。 A.2.104 -xaプロファイル用のコードを生成します。 コンパイル時に TCOVDIR 環境変数を設定すれば、カバレージ (.d) ファイルを置くディレクトリを指定できます。この変数を設定しなければ、カバレージ (.d) ファイルは ソースファイルと同じディレクトリにソースファイルとして残ります。 このオプションは、古いカバレージファイルとの下位互換を保つためだけに使用してください。 A.2.104.1 相互の関連性-xprofile=tcov オプションと -xa オプションは、1 つの実行可能ファイルで同時に使用できます。すなわち、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルが両方含まれたプログラムをリンクすることができます。1 つのファイルを両方のオプションでコンパイルすることはできません。 -xa オプションと -g を一緒に使用することはできません。 警告コンパイルとリンクを別々に行う場合で、-xa でコンパイルした場合は、リンクも -xa で行わなければいけません。そうしないと予期できない結果になることがあります。 関連項目-xprofile=tcov、tcov(1) のマニュアルページ、『プログラムのパフォーマンス解析』 A.2.105 -xalias_level[= n](SPARC) C++ コンパイラで次のコマンドを指定して、型に基づく別名の解析および最適化を実行することができます。
これらは、次の型の lvalue を使用してだけアクセスされます。
A.2.105.1 デフォルト-xalias_level を指定しない場合は、コンパイラでは -xalias_level=any が指定されます。-xalias_level を値なしで指定した場合は、コンパイラでは -xalias_level=compatible が指定されます。 相互の関連性コンパイラは、-xO2 以下の最適化レベルでは、型に基づく別名の解析および最適化を実行しません。 警告reinterpret_cast またはこれに相当する旧形式のキャストを使用している場合には、解析の前提にプログラムが違反することがあります。また、次の例にあるような共用体の型のパンニングも、解析の前提に違反します。
A.2.106 -xarテンプレートを使用する C++ のアーカイブをコンパイルするときには通常、テンプレートデータベース中でインスタンス化されたテンプレート関数をそのアーカイブの中にあらかじめ入れておく必要があります。このオプションはそれらのテンプレートを必要に応じてアーカイブに自動的に追加します。 A.2.106.1 値-xar を指定すると、ar -c -r が起動され、アーカイブがゼロから作成されます。 例次のコマンド行は、ライブラリファイルとオブジェクトファイルに含まれるテンプレート関数をアーカイブします。
警告テンプレートデータベースの .o ファイルをコマンド行に追加しないでください。 アーカイブを構築するときは、ar コマンドを使用しないでください。CC -xar を使用して、テンプレートのインスタンス化情報が自動的にアーカイブに含まれるようにしてください。 関連項目ar(1)、表 15–3 A.2.107 -xarch=isa対象となる命令セットアーキテクチャー (ISA) を指定します 。 このオプションは、コンパイラが生成するコードを、指定した命令セットアーキテクチャーの命令だけに制限します。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。ただし、このオプションを使用するとバイナリプログラムの移植性に影響を与える可能性があります。 注 – 意図するメモリーモデルとして LP64 (64 ビット) または ILP32 (32 ビット) を指定するには、それぞれ -m64 または -m32 オプションを使用してください。次に示すように以前のリリースとの互換性を保つ場合を除いて、-xarch オプションでメモリーモデルを指定できなくなりました。 A.2.107.1 SPARC での -xarch のフラグ次の表に、SPARC プラットフォームでの各 -xarch キーワードの詳細を示します。 表 A–23 SPARC プラットフォームでの -xarch のフラグ
また、次のことにも注意してください。
オプションの選択によっては、生成された実行可能プログラムのパフォーマンスが、初期のアーキテクチャーよりかなり劣ることがあります。また、4 倍精度 (REAL*16 および long double) 浮動小数点命令は、これらの命令セットアーキテクチャーの多くで使用できますが、コンパイラは、それらの命令を生成したコードで使用しません。 x86 での -xarch のフラグ次の表に、x86 プラットフォームでの -xarch フラグを示します。 表 A–24 x86 での -xarch のフラグ
x86 で特に注意すべき点x86 Solaris プラットフォーム用にコンパイルするときは、注意すべき重要な問題がいくつかあります。 古い Sun 形式の並列化プログラムは x86 で使用できません。代わりに OpenMP を使用してください。古い並列化命令を OpenMP に変換する方法については、『Sun Studio 12: OpenMP API User’s Guide』を参照してください。 -xarch をsse、sse2、sse2a、または sse3 に設定してコンパイルしたプログラムは、その拡張機能と機能を提供するプラットフォームだけで実行する必要があります。 Pentium 4 互換プラットフォームの場合、Solaris 9 4/04 以降のリリースは SSE/SSE2 に対応しています。これより前のバージョンの Solaris は SSE/SSE2 に対応していません。-xarch で選択した命令セットが、実行中の Solaris OS で有効でない場合、コンパイラはその命令セットのコードを生成またはリンクすることができません。 コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、-xarch 設定で適切な起動ルーチンがリンクされるようにしてください。 x86 の 80 バイト浮動小数点レジスタが原因で、x86 での演算結果が SPARC の結果と異なる数値になる場合があります。この差を最小にするには、 -fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。 イントリンシック算術ライブラリ (sin(x) など) が異なるため、Solaris と Linux でも演算結果が数値的に異なる場合があります。 バイナリ互換性の検証Sun Studio 11 と Solaris 10 OS から、これらの特殊化された -xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。 Solaris 10 以前のシステムでは確認が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。 これらの -xarch フラグでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、"Illegal Instruction" エラー、セグメント例外、明示的な警告メッセージなしの不正な結果が発生することがあります。 このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、および SSE3 の命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。 SPARC 用のデフォルトC++ コンパイラがコードを生成するときのデフォルトのアーキテクチャーが、v8plus (UltraSPARC) になりました。今後のリリースで、v7 のサポートは廃止される予定です。 新しいデフォルトでは、現在使用されているほぼあらゆるマシンで実行時のパフォーマンスが向上します。ただし、UltraSPARC 以前のコンピュータへの配備を意図したアプリケーションは、そうしたコンピュータ上ではデフォルトで動作しなくなります。アプリケーションがそうしたコンピュータで動作するようにするには、-xarch=v8 でコンパイルしてください。 v8 システムに配備する場合は、各コンパイラコマンド行ばかりでなく、すべてのリンク時コマンドでも -xarch=v8 オプションを明示的に指定する必要があります。提供のシステムライブラリは v8 アーキテクチャーで動作します。 v7 システムに配備する場合は、あらゆるコンパイラコマンド行だけでなく、どのリンク時コマンドでも -xarch=v7 オプションを明示的に指定する必要があります。提供のシステムライブラリは、v8 命令セットを利用します。このリリースの場合、v7 がサポートされているオペレーティングシステムは Solaris 8 OS リリースだけです。v8 命令が検出された場合、Solaris 8 OS はソフトウェアでその命令を解釈します。このためプログラムは実行されますが、パフォーマンスは低下します。 x86 用のデフォルトx86 プラットフォームの場合、-xarch はデフォルトで generic になります。x86 では、-fast は -xarch=native に展開されることに注意してください。このオプションは、コンパイラが生成するコードを、指定した命令セットアーキテクチャーの命令だけに制限します。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。ただし、このオプションを使用するとバイナリプログラムの移植性に影響を与える可能性があります。 別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。 相互の関連性このオプションは単体でも使用できますが、-xtarget オプションの展開の一部でもあります。したがって、特定の -xtarget オプションによって展開された -xarch の値を変更するためにも使用できます。-xtarget=ultra2 は -xarch=v8 plusa -xchip=ultra2 -xcache=16/32/1:512/64/1 に展開されます。次のコマンドでは、-xarch=v8plusb は、-xtarget=ultra2 の展開で設定された -xarch=v8plusa より優先されます。
-xarch=generic64、-xarch=native64、-xarch=v9、-xarch=v9a、または -xarch=v9b のどれも -compat[=4] と組み合わせることはできません。 警告このオプションを最適化と併せて使用する場合、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。ただし、適切な選択をしなかった場合、パフォーマンスが著しく低下するか、あるいは、作成されたバイナリプログラムが目的のターゲットプラットフォーム上で実行できない可能性があります。 別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。 A.2.108 -xautopar注 – このオプションは OpenMP の並列化命令を受け付けません。Sun 固有の MP プラグマは推奨されず、サポートされません。標準命令への移植については、『Sun Studio 12: OpenMP API User’s Guide』を参照してください。 (SPARC) 複数プロセッサの自動並列化を有効にします。依存性の解析 (ループの繰り返し内部でのデータ依存性の解析) およびループ再構成を実行します。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。 独自のスレッド管理を行なっている場合には、-xautopar を使用しないでください。 実行速度を上げるには、マルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたバイナリの実行速度は低下します。 並列化されたプログラムをマルチスレッド環境で実行するには、実行前に OMP_NUM_THREADS 環境変数を設定しておく必要があります。詳細については、『Sun Studio 12: OpenMP API User’s Guide』を参照してください。 -xautopar を使用してコンパイルとリンクを 1 度に実行する場合、リンクには自動的にマイクロタスキング・ライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xautopar を使用してコンパイルとリンクを別々に実行する場合、リンクにも -xautopar を指定しなければいけません。 A.2.108.1 関連項目A.2.109 -xbinopt={prepare| off}(SPARC) あとで 最適化、変換、分析を行うために、バイナリを準備するようコンパイラに命令します。binopt(1) を参照してください。このオプションは、実行可能ファイルまたは共有オブジェクトの構築に使用できます。コンパイルとリンクを別々に行う場合は、両方の手順に -xbinopt を指定する必要があります。
一部のソースコードがコンパイルに使用できない場合も、このオプションを使用してそのほかのコードがコンパイルされます。このとき、最終的なバイナリを作成するリンク手順で、このオプションを使用する必要があります。この場合、このオプションでコンパイルされたコードだけが最適化、変換、分析できます。 A.2.109.1 デフォルトデフォルトは -xbinopt=off です。 相互の関連性このオプションを有効にするには、最適化レベル -xO1 以上で使用する必要があります。このオプションを使用すると、構築したバイナリのサイズが少し増えます。 -xbinopt=prepare と -g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。 A.2.110 -xbuiltin[={ %all|%none}]デフォルトでは、標準ライブラリヘッダで宣言された関数は、コンパイラによって通常の関数として処理されます。ただし、これらの関数の一部は、「組み込み」として認識されます。組み込み関数として処理されるときは、コンパイラでより効果的なコードを生成できます。たとえば、一部の関数は副作用がないことをコンパイラで認識でき、同じ入力が与えられると常に同じ出力が戻されます。一部の関数はコンパイラによって直接インラインで生成できます。オブジェクトファイル内の コンパイラのコメントからコンパイラが実際に置換を行う関数を特定する方法については、er_src(1) のマニュアルページを参照してください。 -xbuiltin=%all オプションは、コンパイラにできるだけ多数の組み込み標準関数を認識するように指示します。認識される関数の正確なリストは、コンパイラコードジェネレータのバージョンによって異なります。 -xbuiltin=%none オプションはデフォルトのコンパイラの動作に影響を与え、コンパイラは組み込み関数に対して特別な最適化は行いません。 A.2.110.1 デフォルト-xbuiltin を指定しないと、コンパイラでは -xbuiltin=%none が使用されます。 -xbuiltin だけを指定すると、コンパイラでは -xbuiltin=%all が使用されます。 相互の関連性マクロ -fast の拡張には、-xbuiltin=%all が取り込まれます。 例次のコンパイラコマンドでは、標準ライブラリ呼び出しを特殊処理するように要求します。
次のコンパイラコマンドでは、標準ライブラリ呼び出しを特殊処理しないように要求します。マクロ -fast の拡張には -xbuiltin=%all が取り込まれていることに注意してください。
A.2.111 -xcache=cオプティマイザ用のキャッシュ特性を定義します。この定義によって、特定のキャッシュが使用されるわけではありません。 注 – このオプションは単独でも使用できますが、-xtarget オプションが展開されたものの一部です。このオプションの主な目的は、-xtarget オプションにより指定される値を変更することです。 このリリースで、キャッシュを共有できるスレッド数を指定するオプションの特性 [/ti] が導入されました。 A.2.111.1 値c には次の値のいずれかを指定します。 表 A–25 -xcache の値
キャッシュ属性 si/li/ai/ti の定義は、次のとおりです。
たとえば、i=1 は、レベル 1 のキャッシュ属性の s1/l1/a1 を意味します。 デフォルト-xcache を指定しないと、 -xcache=generic がデフォルトで使用されます。この値を指定すると、ほとんどの SPARC プロセッサで良好なパフォーマンスが得られ、どのプロセッサでも顕著なパフォーマンスの低下がないキャッシュ属性がコンパイラで使用されます。 t の値を指定しない場合のデフォルトは 1 です。 例-xcache=16/32/4:1024/32/1 の設定内容は、次のとおりです。
関連項目-xtarget=t A.2.112 -xcg[89|92](SPARC) 非推奨、使用しないでください。現在の Solaris オペレーティングシステムのソフトウェアは、SPARC V7 アーキテクチャーをサポートしません。このオプションでコンパイルすると、現在の SPARC プラットフォームでの実行速度が遅いコードが生成されます。-O を使用して、-xarch、-xchip、および -xcache のコンパイラのデフォルトを利用します。 A.2.113 -xchar[= o]この オプションは、 char 型が符号なしで定義されているシステムからのコード移植を簡単にするためのものです。そのようなシステムからの移植以外では、このオプションは使用しないでください。符号付きまたは符号なしであると明示的に示すように書き直す必要があるのは、符号に依存するコードだけです。 A.2.113.1 値o には、次のいずれかを指定します。 表 A–26 -xchar の値
デフォルト-xchar を指定しない場合は、コンパイラでは -xchar=s が指定されます。 -xchar を値なしで指定した場合は、コンパイラでは -xchar=s が指定されます。 相互の関連性-xchar オプションは、-xchar を指定してコンパイルしたコードでだけ、char 型の値の範囲を変更します。システムルーチンまたはヘッダーファイル内の char 型の値の範囲は変更しません。特に、CHAR_MAX および CHAR_MIN の値 (limits.h で定義される) は、このオプションを指定しても変更されません。したがって、CHAR_MAX および CHAR_MIN は、通常の char で符号化可能な値の範囲を示さなくなります。 警告-xchar を使用するときは、マクロでの値が符号付きの場合があるため、char を定義済みのシステムマクロと比較する際には特に注意してください。これは、マクロを使用してエラーコードを戻すルーチンでもっとも一般的です。エラーコードは、一般的には負の値になっています。したがって、char をそのようなマクロによる値と比較するときは、結果は常に false になります。負の数値が符号なしの型の値と等しくなることはありません。 ライブラリを使用してエクスポートしているインタフェース用のルーチンは、-xchar を使用してコンパイルしないようにお勧めします。Solaris ABI では char 型を符号付きとして指定すると、システムライブラリが指定に応じた動作をします。char を符号なしにする影響は、システムライブラリで十分にテストされたわけではありません。このオプションを使用しないで、char 型の符号の有無に依存しないようにコードを変更してください。char 型の符号は、コンパイラやオペレーティングシステムによって異なります。 A.2.114 -xcheck[= i]SPARC: -xcheck=stkovfを指定してコンパイルすると、シングルスレッドのプログラム内のメインスレッドのスタックオーバーフローおよびマルチスレッドプログラム内のスレーブスレッドのスタックが実行時にチェックされます。スタックオーバーフローが検出された場合は、SIGSEGV が生成されます。アプリケーションで、スタックオーバーフローで生成される SIGSEGV をほかのアドレス空間違反と異なる方法で処理する必要がある場合は、sigaltstack(2) を参照してください。 A.2.114.1 値i には、次のいずれかを指定します。 表 A–27 -xcheck の値
デフォルト-xcheck を指定しない場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。 引数を指定せずに -xcheck を使用した場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。 -xcheck オプションは、コマンド行で累積されません。コンパイラは、コマンドで最後に指定したものに従ってフラグを設定します。 A.2.115 -xchip=cオプティマイザが使用するターゲットとなるプロセッサを指定します。 ターゲットとなるプロセッサを指定することによって、タイミング属性を指定します。このオプションは次のものに影響を与えます。
A.2.115.1 値c には次の値のいずれかを指定します。 表 A–28 -xchip の値
デフォルトほとんどの SPARC プロセッサでは、デフォルト値の generic を使用すれば、どのプロセッサでもパフォーマンスの著しい低下がなく、良好なパフォーマンスが得られる最良のタイミング属性がコンパイラで使用されます。 A.2.116 -xcode=aSPARC: コードのアドレス空間を指定します。 注 – 共有オブジェクトの構築では、-xcode=pic13 または -xcode=pic32 を指定することをお勧めします。-xarch=v9 -xcode=abs64 と -xarch=v8 -xcode=abs32 を指定して有効な共有オブジェクトを構築することは可能ですが、効率は悪くなります。-xarch=v9 -xcode=abs32 または -xarch=v9 -xcode=abs44 を指定して構築したオブジェクトは機能しません。 A.2.116.1 値a には次のいずれかを指定します。 表 A–29 -xcode の値
-xcode=pic13 または -xcode=pic32 のどちらを使用すべきか決定するときは、 elfdump -c (詳細は elfdump(1) のマニュアルページを参照) を使用することによって、セクションヘッダー (sh_name: .got) を探して、大域オフセットテーブル (GOT) のサイズを調べてください。sh_size 値が GOT のサイズです。GOT のサイズが 8,192 バイトに満たない場合は -xcode=pic13、そうでない場合は -xcode=pic32 を指定します。 一般に、-xcode の使用方法の決定に際しては、次のガイドラインに従ってください。
デフォルト32 ビットアーキテクチャーの場合は -xcode=abs32 です。64 ビットアーキテクチャーの場合は -xcode=abs44 です。 共有動的ライブラリを作成する場合、64 ビットアーキテクチャーでは -xcode のデフォルト値である abs44 と abs32 を使用できません。-xcode=pic13 または -xcode=pic32 を指定してください。SPARC の場合、-xcode=pic13 および -xcode=pic32 では、わずかですが、次の 2 つのパフォーマンス上の負担がかかります。
こうした負担があるとしても、-xcode=pic13 あるいは -xcode=pic32 を使用すると、ライブラリコードを共有できるため、必要となるシステムメモリーを大幅に減らすことができます。-xcode=pic13 あるいは -xcode=pic32 でコンパイルした共有ライブラリを使用するすべてのプロセスは、そのライブラリのすべてのコードを共有できます。共有ライブラリ内のコードに非 pic (すなわち、絶対) メモリー参照が 1 つでも含まれている場合、そのコードは共有不可になるため、そのライブラリを使用するプログラムを実行する場合は、その都度、コードのコピーを作成する必要があります。 .o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされたかどうかを調べるには、次のように nm コマンドを使用すると便利です。
位置独立コードを含む .o ファイルには、_GLOBAL_OFFSET_TABLE_ への未解決の外部参照が含まれます。このことは、英文字の U で示されます。 -xcode=pic13 または -xcode=pic32 を使用すべきかどうかを判断するには、nm を使用して、共有ライブラリで使用または定義されている明確な大域および静的変数の個数を確認します。_GLOBAL_OFFSET_TABLE_ のサイズが 8,192 バイトより小さい場合は、-Kpic を使用できます。そうでない場合は、-xcode=pic32 を使用する必要があります。 警告別々の手順でコンパイルしてリンクする場合は、コンパイル手順とリンク手順で同じ -xarch オプションを使用する必要があります。 A.2.117 -xcrossfile[= n]SPARC: 複数ソースファイルに渡る最適化とインライン化を有効にします。-xcrossfile は、コンパイル時に機能し、コンパイルコマンドで指定したファイルだけに対して有効になります。次にコマンド行の例を示します。
f1.cc ファイルと f2.cc ファイルの間、および f3.cc ファイルと f4.cc ファイルの間でクロスモジュールの最適化が行われます。f1.cc と f3.cc または f1.cc とf4.cc の間では最適化は行われません。 A.2.117.1 値n には次の値のいずれかを指定します。 表 A–30 -xcrossfile の値
通常、コンパイラの解析の範囲は、コマンド行で指定した個々のファイルごとに行われます。たとえば、-xO4 オプションを指定した場合、自動インライン化は同じソースファイル内で定義および参照されているサブプログラムにのみ行われます。 -xcrossfile または -xcrossfile=1 を指定すると、コンパイラはコマンド行で指定されたすべてのファイルを一括して分析し、それらが単一のソースファイルであるかのように扱います。 デフォルト-xcrossfile を指定しない場合、-xcrossfile=0 が仮定され、複数のソースファイルに渡る最適化とインライン化は行われません。 -xcrossfile は -xcrossfile=1 と同じです。 相互の関連性-xcrossfile オプションは、-xO4 または -xO5 と一緒に使用した場合にのみ効果が得られます。 警告このオプションを使ってコンパイルされたファイルは、インライン化されたコードを 含む可能性があるため、相互に依存しています。したがって、プログラムにリンクす るときは、1 つの単位として使用しなければいけません。あるルーチンを変更したために、関連するファイルを再コンパイルした場合は、すべてのファイルを再コンパイルする必要があります。結果として、このオプションを使用すると、メイクファイルの構成に影響を与えます。 関連項目-xldscope A.2.118 -xdebugformat=[stabs|dwarf]デバッグ情報の形式をスタブ形式から「DWARF Debugging Information Format」で規定されている dwarf 形式に変換します。このリリースのデフォルト設定は -xdebugformat=stabs です。 デバッグ情報を読み取るソフトウェアを保守している場合は、今回からそのようなツールを stab 形式から dwarf 形式へ移行するためのオプションが加わりました。 このオプションは、ツールを移植する場合に新しい形式を使用する方法として使用してください。デバッガ情報を読み取るソフトウェアを保守していないか、ツールでこれらの内のいずれかの形式のデバッガ情報が必要でなければ、このオプションを使用する必要はありません。 表 A–31 -xdebugformat のフラグ
-xdebugformat を指定しない場合は、コンパイラでは -xdebugformat=stabs が指定されます。このオプションには引数が必要です。 このオプションは、 -g オプションによって記録されるデータの形式に影響します。-g を指定しなくても、一部のデバッグ情報が記録されますが、その情報の形式もこのオプションによって制御されます。したがって、-g を使用しなくても、-xdebugformat は有効です。 dbx とパフォーマンスアナライザソフトウェアは、stab 形式と dwarf 形式を両方とも認識するので、このオプションを使用しても、ツールの機能にはまったく影響を与えません。 注 – これは過渡的なインタフェースなので、今後のリリースでは、マイナーリリースであっても互換性なく変更されることがあります。stab と dwarf のどちらであっても、特定のフィールドまたは値の詳細は、今後とも変更される可能性があります。 詳細は、dumpstabs(1) および dwarfdump(1) のマニュアルページも参照してください。 A.2.119 -xdepend=[yes| no](SPARC) ループの繰り返し内部での データ依存性の解析およびループ再構成を実行します。 ループの再構成には、ループの交換、ループの融合、スカラーの置換、無意味な配列への代入の除去が含まれます。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。 -xdepend を指定しない場合、デフォルトは -xdepend=no で、コンパイラはデータ依存関係についてループを分析しません。引数を指定しないで、-xdepend を指定すると、オプションは -xdepend=yes に設定され、コンパイラはデータ依存関係についてループを分析します。 依存性の解析はシングルプロセッサシステムで役立つことがあります。ただし、シングルプロセッサシステムに -xdepend を試みる場合は、-xautopar を使用しないでください。-xautopar が有効になっていると、-xdepend の最適化はマルチプロセッサシステムについて実行されます。 A.2.120 -xdumpmacros[= value[,value...]]マクロがプログラム内でどのように動作しているかを調べたいときに、このオプションを使用します。このオプションは、定義済みマクロ、解除済みマクロ、実際の使用状況といった情報を提供します。マクロの処理順序に従って、標準エラー (stderr) に出力されます。-xdumpmacros オプションは、ファイルの終わりまで、または dumpmacros プラグマまたは end_dumpmacros プラグマによって上書きされるまで有効です。「B.2.5 #pragma dumpmacro s」を参照してください。 A.2.120.1 値value の代わりに次の引数を使用できます。 表 A–32 -xdumpmacros の値
オプションの値は追加されていきます。-xdumpmacros=sys -xdumpmacros=undefs を指定した場合と、-xdumpmacros=undefs,sys を指定した場合の効果は同じです。 注 – サブオプション loc、conds、sys は、オプション defs、undefs、use の修飾子です。loc 、conds 、sys は、単独では効果はありません。たとえば -xdumpmacros=loc,conds,sys は、まったく効果を持ちません。 デフォルト引数を付けないで -xdumpmacros を指定した場合、-xdumpmacros=defs,undefs,sys を指定したことになります。-xdumpmacros を指定しなかった場合、デフォルト値として -xdumpmacros=%none が使用されます。 例-xdumpmacros=use,no%loc オプションを使用すると、使用した各マクロの名前が一度だけ出力されます。より詳しい情報が必要であれば、-xdumpmacros=use,loc オプションを使用します。マクロを使用するたびに、そのマクロの名前と位置が印刷されます。 次はファイル t.c の例です。
次の例は、defs、undefs、sys、および loc の引数に基づいた、ファイル t.c の出力を示しています。
次の例では、use、loc、および conds の引数によって、マクロ動作がファイル t.c に出力されます。
次は、ファイル y.c の例です。
次は、y.c 内のマクロに基づいた -xdumpmacros=use,loc の出力です。
関連項目dumpmacros プラグマと end_dumpmacros プラグマを使用すれば、-xdumpmacros のスコープを変更でき |