Sun Studio 12: C++ ユーザーズガイド
この本のみを検索
この本を見る:
PDF 文書ファイルをダウンロードする (2188 KB)

A.2 オプションの一覧

次の節では、C++ コンパイラオプションのアルファベット順の一覧と、プラットフォームの制限を示しています。

A.2.1 -386

x86: -xtarget=386同じです。このオプションは、下位互換のためだけに用意されています。

A.2.2 -486

x86: -xtarget=486同じです。このオプションは、下位互換のためだけに用意されています。

A.2.3 -a

-xa同じです。

A.2.4 -Bbinding

ライブラリのリンク形式を、シンボリックか、動的 (共有)、静的 (共有でない) のいずれかから指定します。

-B オプションは同じコマンド行で何回も指定できます。このオプションはリンカー (ld) に渡されます。


注 –

Solaris の 64 ビットコンパイル環境では、多くのシステムライブラリは、動的ライブラリのみ使用できます。このため、コマンド行の最後に -Bstatic を使用しないでください。


A.2.4.1 値

binding には次のいずれかの値を指定します。

意味

dynamic

まず liblib.so (共有) ファイルを検索するようにリンカーに指示します。 これらのファイルが見つからないと、リンカーは liblib.a (静的で共有されない) ファイルを検索します。ライブラリのリンク方式を共有にしたい場合は、このオプションを指定します。

static

-Bstatic オプションを指定すると、リンカーは liblib.a (静的で、共有されない) ファイルだけを検索します。ライブラリのリンク形式を非共有にしたい場合は、このオプションを指定します。

symbolic

シンボルがほかですでに定義されている場合でも、可能であれば共有ライブラリ内でシンボル解決を実行します。

ld(1) のマニュアルページを参照してください。

-Bbinding との間に空白があってはいけません。

デフォルト

-B を指定しないと、-Bdynamic が使用されます。

相互の関連性

C++ のデフォルトのライブラリを静的にリンクするには、-staticlib オプションを使用します。

-Bstatic および -Bdynamic オプションは、デフォルトで使用されるライブラリのリンクにも影響します。デフォルトのライブラリを動的にリンクするには、最後に指定する -B-Bdynamic でなければいけません。

64 ビットの環境では、多くのシステムライブラリは共有の動的ライブラリとしてのみ利用できます。これらのシステムライブラリには、libm.so および libc.so があります (libm.alibc.a は提供していません)。その結果、-Bstatic-dn を使用すると 64 ビットの Solaris オペレーティングシステムでリンクエラーが生じる可能性があります。この場合、アプリケーションを動的ライブラリとリンクさせる必要があります。

次の例では、libfoo.so があっても libfoo.a がリンクされます。ほかのすべてのライブラリは動的にリンクされます。


example% CC a.o -Bstatic -lfoo -Bdynamic

警告

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}

-xcg{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=4

(互換モード) 言語とバイナリの互換性を 4.0.1、4.1、4.2 コンパイラに合わせます。__cplusplus プリプロセッサマクロを 1 に、__SUNPRO_CC_COMPAT プリプロセッサマクロを 4 にそれぞれ設定します。

-compat=5

(標準モード) 言語とバイナリの互換性を ANSI/ISO 標準モード 5.0 コンパイラに合わせます。__cplusplus プリプロセッサマクロを 1997IIL に、__SUNPRO_CC_COMPAT プリプロセッサマクロを 5 にそれぞれ設定します。

デフォルト

-compat オプションを指定しないと、-compat=5 が使用されます。

-compat だけを指定すると、-compat=4 が使用されます。

相互の関連性

標準ライブラリは互換モード (-compat[=4]) で使用できません。

-compat[=4] では次のオプションの使用はサポートしていません。

  • -Bsymbolic

  • -features=[no%]strictdestrorder

  • -features=[no%]tmplife

  • -library=[no%]iostream

  • -library=[no%]Cstd

  • -library=[no%]Crun

  • -library=[no%]rwtools7_std

  • -xarch=native64-xarch=generic64-xarch=v9-xarch=v9a、または -xarch=v9b

-compat=5 では次のオプションの使用はサポートされません。

  • -Bsymbolic

  • +e

  • features=[no%]arraynew

  • features=[no%]explicit

  • features=[no%]namespace

  • features=[no%]rtti

  • library=[no%]complex

  • library=[no%]libC

  • -vdelx

警告

共有ライブラリを構築するときは、-Bsymbolic を使用しないでください。

関連項目

C++ 移行ガイド

A.2.8 +d

C++ インライン関数を展開しません。

C++ 言語の規則では、C++ は、次の条件のうち 1 つがあてはまる場合にインライン化します。

  • 関数が inline キーワードを使用して定義されている

  • 関数がクラス定義の中に (宣言されているだけでなく) 定義されている

  • 関数がコンパイラで生成されたクラスメンバー関数である

C++ 言語の規則では、呼び出しを実際にインライン化するかどうかをコンパイラが選択します。ただし、次の場合を除きます。

  • 関数が複雑すぎる、

  • +d オプションが選択されている、または

  • -g オプションが選択されている

A.2.8.1 例

デフォルトでは、コンパイラは次のコード例で関数 f()memf2() をインライン化できます。また、クラスには、コンパイラによって生成されたデフォルトのコンストラクタとコンパイラでインライン化できるデストラクタがあります。+d を使用すると、コンパイラでコンストラクタ f() とデストラクタ C::mf2() はインライン化されません。


inline int f() {return 0;} // おそらくインライン化される
class C {
  int mf1(); // インライン定義が出現するまではインライン化されない
  int mf2() {return 0;} // おそらくインライン化される
};

相互の関連性

デバッグオプション -g を指定すると、このオプションが自動的に有効になります。

-g0 デバッグオプションでは、+d は有効になりません。

+d オプションは、-x04 または -x05 を使用するときに実行される自動インライン化に影響を与えません。

関連項目

-g0-g

A.2.9 -Dname[ =def]

プリプロセッサに対してマクロシンボル名 name を def と定義します。

このオプションは、ソースファイルの先頭に #define 指令を記述するのと同じです。-D オプションは複数指定できます。

A.2.9.1 値

次の表は、事前に定義されているマクロを示しています。これらの値は、#ifdef のようなプリプロセッサに対する条件式の中で使用できます。

表 A–2 事前定義マクロ

プラットフォーム

マクロ名

備考

SPARC および x86

__ARRAYNE W

「配列」形式の演算子 newdelete を有効にしてコンパイルした場合に使用される。詳細は -features=[no%]arraynew を参照。

__BUILTIN_VA_ARG_INCR

varargs.hstdarg.hsys/varags.h のキーワードが __builtin_alloca__builtin_va_alist__builtin_va_arg_incr の場合に使用される。

__DATE__

__FILE__

__LINE__

__STDC__

ゼロに設定

_ _SUNPRO_CC=0x590

__SUNPRO_CC の値はコンパイラのリリース番号を表す。

__SUNPRO_CC_COMPAT=4 または __SUNPRO_CC_COMPAT=5

「A.2.7 -compat[={ 4|5}]」を参照してください。

__TIME__

__cplusplus

_ _’uname- s’_’uname- r’

uname -suname -s の出力で、uname -runame -r の出力。無効な文字 (ピリオドなど) は下線で置き換えられる (例: -D__SunOS_5_9 および -D__SunOS_5_10)。

__unix

_ BOOL

ブール型を有効にした場合に使用される。詳細は -features=[no%]bool を参照

_WCHAR_T

unix

相互の関連性」を参照。

SPARC

__SUN_PREFETCH=1

__SunOS_OSversion _OSversion

__SVR4

__sparc

__sun

sparc

相互の関連性」を参照。

sun

相互の関連性」を参照。

SPARC v9

__sparcv9

64 ビットコンパイルモードのみ

x86

i386

linux

_ _amd64

_ _gnu_ _linux_ _

_ _i386

相互の関連性」を参照。

_ _ linux

_ _ linux_ _

_ _x86 _ 64

=def を使用しないと、name は 1 になります。

相互の関連性

+p が使用されている場合は、sununixsparci386 は定義されません。

関連項目

-U

A.2.10 -d{y| n}

実行可能ファイル全体に対して動的ライブラリを 使用できるかどうか指定します。

このオプションは ld に渡されます。

このオプションは、コマンド行では 1 度だけしか使用できません。

A.2.10.1 値

意味

-dy

リンカーで動的リンクを実行します。

-dn

リンカーで静的リンクを実行します。

デフォルト

-d オプションを指定しないと、-dy が使用されます。

相互の関連性

64 ビットの環境では、多くのシステムライブラリは共有の動的ライブラリとしてのみ利用できます。これらのシステムライブラリには、libm.so および libc.so があります。libm.alibc.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


#if __cplusplus < 199711L
int power(int, int);
#else
template <> int power(int, int);
#endif

int main () {
  int x;
  x=power(2, 10);
}
.


例 A–2 -E オプションを使用したときの foo.cc のプリプロセッサ出力


example% CC -E foo.cc
#4 "foo.cc"
template < > int power (int, int);


int main () {
int x;
x = power (2, 10);
}

警告

テンプレートを使用する場合は、このオプションの結果を C++ コンパイラの入力に使用することはできません。

関連項目

-P

A.2.14 +e{0|1}

互換モード (-compat[=4]) のときに仮想テーブルの生成を制御します。標準モード (デフォルトモード) のときには無効な指定として無視されます。

A.2.14.1 値

+e オプションには次の値を指定できます。

意味

0

仮想テーブルを生成せず、必要とされているテーブルへの外部参照を生成します。

1

仮想関数を使用して定義したすべてのクラスごとに仮想テーブルを生成します。

相互の関連性

このオプションを使用してコンパイルする場合は、-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 の値

意味

tag

tag のリストに指定されているメッセージを抑制します。-errtags=yes オプションで、メッセージのタグを表示することができます。

no%tag

tag 以外のすべての警告メッセージの抑制を解除します。

%all

すべての警告メッセージを抑制します。

%none

すべてのメッセージの抑制を解除します (デフォルト)。

デフォルト

デフォルトは -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 の値

意味

tag

tag に指定されたメッセージが警告メッセージとして発行されると、CC は致命的エラーステータスを返して終了します。tag に指定されたメッセージが発行されない場合は無効です。

no%tag

tag に指定されたメッセージが警告メッセージとしてのみ発行された場合に、CC が致命的なエラーステータスを返して終了しないようにします。<タグ> に指定されたメッセージが発行されない場合は無効です。このオプションは、<タグ> または %all を使用して以前に指定したメッセージが警告メッセージとして発行されても cc が致命的エラーステータスで終了しないようにする場合に使用してください。

%all

警告メッセージが 1 つでも発行されると CC は致命的ステータスを返して終了します。%all に続いて no%<タグ> を使用して、特定の警告メッセージを対象から除外することもできます。

%none

どの警告メッセージが発行されても CC が致命的エラーステータスを返して終了することがないようにします。

デフォルト

デフォルトは、-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 の拡張

オプション

SPARC

x86

-fns

X

X

-fsimple=2

X

X

-nofstore

-

X

-xarch

X

X

-xbuiltin=%all

X

X

-xdepend

X

X

-xlibmil

X

X

-xlibmopt

X

X

-xmemalign

X

-

-xO5

X

X

-xregs=frameptr

-

X

-xtarget=native

X

X

相互の関連性

-fast マクロから展開されるコンパイラオプションが、指定されたほかのオプションに影響を与えることがあります。たとえば、次のコマンドの -fast マクロの展開には -xtarget=native が含まれています。そのため、ターゲットのアーキテクチャーは -xarch に指定された SPARC-V9 ではなく、32 ビットアーキテクチャーのものに戻されます。


example% CC -xarch=v9 -fast test.cc


example% CC -fast -xarch=v9 test.cc

個々の相互の関連性については、各オプションの説明を参照してください。

このコード生成オプション、最適化レベル、組み込み関数の最適化、インラインテンプレートファイルの使用よりも、そのあとで指定するフラグの方が優先されます (例を参照)。ユーザーの指定した最適化レベルは、以前に設定された最適化レベルを無効にします。

-fast オプションには -fns -ftrap=%none が含まれているため、このオプションによってすべてのトラップが無効になります。

次のコンパイラコマンドでは、最適化レベルは -x03 になります。


example% CC -fast -xO3

次のコンパイラコマンドでは、最適化レベルは -xO5 になります。


example% CC -xO3 -fast

警告

別々の手順でコンパイルしてリンクする場合は、-fast オプションをコンパイルコマンドとリンクコマンドの両方に表示する必要があります。

コンパイラで -fast オプションを指定すると、そのコードの移植性は失われます。たとえば、UltraSPARC-III システムで次のコマンドを指定すると、生成されるバイナリは UltraSPARC-II システムでは動作しません。


example% CC -fast test.cc

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 オプション

意味

%all

指定されているモード (互換モードか標準モード) に対して有効なすべての -feature オプションを有効にします。

[no%]altspell

トークンの代替スペル (たとえば、&& の代わりの and) を認識します [しません]。デフォルトは互換モードで no%altspell、標準モードで altspell です。

[no%]anachronisms

廃止されている構文を許可します [しません]。無効にした場合 (つまり、-features=no%anachronisms)、廃止されている構文は許可されません。デフォルトは anachronisms です。

[no%]bool

ブール型とリテラルを許可します [しません]。有効にした場合、マクロ _BOOL=1 が定義されます。有効にしないと、マクロは定義されません。デフォルトは互換モードで no%bool

標準モードで bool です。

[no%]co nststrings

リテラル文字列を読み取り専用メモリーに入れます [入れません]。デフォルトは互換モードで no%conststrings、標準モードで conststrings です。

[no%]except

C++ 例外を許可します [しません]。C++ 例外を無効にした場合 (つまり、-features=no%except)、関数に指定された throw は受け入れられますが無視されます。つまり、コンパイラは例外コードを生成しません。キーワード trythrow、および catch は常に予約されています。「8.3 例外の無効化」を参照してください。デフォルトは except です。

[no%]export

キーワード export を認識します [しません]。デフォルトは互換モードで no%export、標準モードで export です。

[no%]extensions

ほかの C++ コンパイラによって一般に受け入れられた非標準コードを許可します [しません]。 -features=extensions オプションを使用するときにコンパイラによって受け入れられる無効なコードの説明については表 3–17 を参照してください。デフォルトは no%extensions です。

[no%]iddollar

識別子の最初以外の文字に $ を許可します [しません]。デフォルトは no%iddollar です。

[no%]localfor

for 文に対して新しい局所スコープ規則を使用します [しません]。デフォルトは互換モードで no%localfor、標準モードで localfor です。

[no%]mutable

キーワード mutable を認識します [しません]。デフォルトは互換モードで no%mutable、標準モードで mutable です。

[no%]split_init

非ローカル静的オブジェクトの初期設定子を個別の関数に入れます [入れません]。-features=no%split_init を使用すると、コンパイラではすべての初期設定子が 1 つの関数に入れられます。-features=no%split_init を使用すると、コンパイル時間を可能なかぎり費やしてコードサイズを最小化します。デフォルトは split_init です。

[no%]transitions

標準 C++ で問題があり、しかもプログラムが予想とは違った動作をする可能性があるか、または将来のコンパイラで拒否される可能性のある ARM 言語構造を許可します [しません]。-features=no%transitions を使用すると、コンパイラではこれらの言語構造をエラーとして扱います。-features=transitions を標準モードで使用すると、これらの言語構造に関してエラーメッセージではなく警告が出されます。-features=transitions を互換モード (-compat[=4]) で使用すると、コンパイラでは +w または +w2 が指定された場合にかぎりこれらの言語構造に関する警告が表示されます。次の構造は移行エラーとみなされます。テンプレートの使用後にテンプレートを再定義する、typename 指示をテンプレートの定義に必要なときに省略する、int 型を暗黙的に宣言する。一連の移行エラーは将来のリリースで変更される可能性があります。デフォルトは transitions です。

%none

指定されているモードに対して無効にできるすべての機能を無効にします。

標準モード (デフォルトのモード) では、a にはさらに次の値の 1 つを指定できます。

表 A–7 標準モードだけに使用できる -features オプション

意味

[no%]strictdestrorder

静的記憶領域にあるオブジェクトを破棄する順序に関する、C++ 標準の必要条件に従います [従いません]。デフォルトは strictdestrorder です。

[no%]tmplrefstatic

関数テンプレートからの依存静的関数または静的関数テンプレートの参照を許可します [許可しません]。デフォルトは標準準拠の no%tmplrefstatic です。

[no%]tmplife

完全な式の終わりに式によって作成される一時オブジェクトを ANSI/ISO C++ 標準の定義に従って整理します [しません]。-features=no%tmplife が有効である場合は、大多数の一時オブジェクトはそのブロックの終わりに整理されます。デフォルトは no%tmplife です。

互換モード (-compat[=4]) では、a にはさらに次の値の 1 つを指定できます。

表 A–8 互換モードだけに使用できる -features オプション

意味

[no%]arraynew

operator newoperator delete の配列形式を認識します [しません] (たとえば、operator new [ ] (void*))。これを有効にすると、マクロ __ARRAYNEW=1 が定義されます。有効にしないと、マクロは定義されません。デフォルトは no%arraynew です。

[no%]explicit

キーワード explicit を認識します [しません]。デフォルトは no%explicit です。

[no%]namespace

キーワード namespaceusing を許可します [しません]。デフォルトは no%namespace です。

-features=namespace は、コードを標準モードに変換しやすくするために使用します。このオプションを有効にすると、これらのキーワードを識別子として使用している場合にエラーメッセージが表示されます。キーワード認識オプションを使用すると、標準モードでコンパイルすることなく、追加キーワードが使用されているコードを特定することができます。

[no%]rtti

実行時の型識別 (RTTI) を許可します [しません]。dynamic_cast<> および typeid 演算子を使用する場合は、RTTI を有効にする必要があります。-compat=4 mode の場合、デフォルトは no%rtti です。そうでない場合、デフォルトは -features=rtti で、オプション -features=no%rtti は使用できません。


注 –

[no%]castop は、C++ 4.2 コンパイラ用に作成されたメイクファイルとの互換性を維持するために使用できますが、C++ 5.0、5.1、5.2、および 5.3 コンパイラには影響はありません。新しい書式の型変換 (const_castdynamic_castreinterpret_caststatic_cast) は常に認識され、無効にすることはできません。


デフォルト

-features を指定しないと、次が使用されます。

  • 互換モード (-compat[=4])


-features=%none,anachronisms,except,split_init,transitions
  • 標準モード (デフォルトモード)


-features=%all,no%iddollar,no%extensions,no%tmplife

相互の関連性

このオプションは、置き換えられる代わりに蓄積されます。

次の値の標準モードによる使用 (デフォルト) は、標準ライブラリやヘッダーと互換性がありません。

  • no%bool

  • no%except

  • no%mutable

  • no%explicit

互換モード (-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 の値

意味

[no%]errors

C++ のリンカーエラーメッセージの説明を表示します [しません]。説明の抑止は、リンカーの診断を別のツールに直接提供している場合に便利です。

[no%]names

C++ で符号化されたリンカー名を復号化します [しません]。

[no%]returns

関数の戻り型を復号化します [しません]。この種の復号化を抑止すると、より迅速に関数名が識別しやすくなりますが、共有の不変式の戻り値の場合、一部の関数は戻り型でのみ異なることに注意してください。

[no%]stdlib

リンカーとコンパイラの両方のエラーメッセージに出力される標準ライブラリからの名前を簡略化します。この結果、標準ライブラリテンプレート型の名前を容易に認識できるようになります。

%all

-filt=errors,names,returns,stdlib に相当します。これはデフォルトの動作です。

%none

-filt=no%errors,no%names,no%returns,no%stdlib に相当します。

デフォルト

-filt オプションを指定しないで、または値を入れないで -filt を指定すると、コンパイラでは -filt=%all が使用されます。

次の例では、このコードを -filt オプションでコンパイルしたときの影響を示します。


// filt_demo.cc
class type {
public:
    virtual ~type(); // 定義なし
};

int main()
{
    type t;
}

-filt オプションを指定しないでコードをコンパイルすると、コンパイラでは -filt=errors,names,returns,stdlib が使用され、標準出力が表示されます。


example% CC filt_demo.cc
Undefined             first referenced
 symbol                  in file
type::~type()         filt_demo.o
type::__vtbl          filt_demo.o
[Hint: try checking whether the first non-inlined, non-pure virtual function of class type is defined]

ld: fatal: Symbol referencing errors. No output written to a.out

次のコマンドでは、C++ で符号化されたリンカー名の復号化が抑止され、C++ のリンカーエラーの説明が抑止されます。


example% CC -filt=no%names,no%errors filt_demo.cc
Undefined                       first referenced
 symbol                             in file
__1cEtype2T6M_v_                    filt_demo.o
__1cEtypeG__vtbl_                   filt_demo.o
ld: fatal: Symbol referencing errors. No output written to a.out

次のコードについて考えてみましょう。


#include <string>
#include <list>
int main()
{
    std::list<int> l;
    std::string s(l); // error here
}

次は、-filt=no%stdlib を指定したときの出力です。


Error: Cannot use std::list<int, std::allocator<int>> to initialize
std::basic_string<char, std::char_traits<char>,
std::allocator<char>>.

次は、-filt=stdlib を指定したときの出力です。


Error: Cannot use std::list<int> to initialize std::string .

相互の関連性

no%names を使用しても returnsno%returns に影響はありません。つまり、次のオプションは同じ効果を持ちます。

  • -filt=no%names

  • -filt=no%names,no%returns

  • -filt=no%names,returns

A.2.21 -flags

-xhelp=flags と同じです。

A.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}]

  • SPARC: SPARC 非標準浮動小数点モードを有効または無効にします。

    -fns=yes (または-fns) を指定すると、プログラムが実行を開始するときに、非標準浮動小数点モードが有効になります。

    このオプションを使うと、-fns を含むほかのマクロオプション (-fast など) のあとで非標準と標準の浮動小数点モードを切り替えることができます。

    一部の SPARC デバイスでは、非標準浮動小数点モードで「段階的アンダーフロー」が無効にされ、非正規の数値を生成する代わりに、小さい値がゼロにフラッシュされます。さらに、このモードでは、非正規のオペランドが報告なしにゼロに置き換えられます。

    段階的アンダーフローや、非正規の数値をハードウェアでサポートしない SPARC デバイスでは、-fns=yes (または -fns) を使用すると、プログラムによってはパフォーマンスが著しく向上することがあります。

  • (x86) SSE flush-to-zero モードを選択します。利用可能な場合には、denormals-are-zero モードが選択されます。

    このオプションは、非正規数の結果をゼロにフラッシュします。また利用可能な場合には、非正規数オペランドもゼロとして扱われます。

    このオプションは、SSE や SSE2 命令セットを利用しない従来の x86 浮動小数点演算には影響しません。

A.2.24.1 値

-fns オプションには次の値を指定できます。

表 A–10 -fns の値

意味

yes

非標準浮動小数点モードを選択します。

no

標準浮動小数点モードを選択します。

デフォルト

-fns を指定しないと、非標準浮動小数点モードは自動的には有効にされません。標準の IEEE 754 浮動小数点計算が行われます。 つまり、アンダーフローは段階的です。

-fns だけを指定すると、-fns=yes が使用されます。

次の例では、-fast は複数のオプションに展開され、その中には -fns=yes (非標準浮動小数点モードを選択する) も含まれます。ところが、そのあとに続く -fns=no が初期設定を変更するので、結果的には、標準の浮動小数点モードが使用されます。


example% CC foo.cc -fast -fns=no

警告

非標準モードが有効になっていると、浮動小数点演算によって、IEEE 754 規格の条件に合わない結果が出力されることがあります。

1 つのルーチンを -fns でコンパイルした場合は、そのプログラムのすべてのルーチンを -fns オプションでコンパイルする必要があります。そうしないと、予期しない結果が生じることがあります。

このオプションは、SPARC プラットフォームでメインプログラムをコンパイルするときしか有効ではありません。x86 プラットフォームでは、このオプションは無視されます。

-fns=yes (または -fns のみ) を使用したときに、通常は IEEE 浮動小数点トラップハンドラによって管理される浮動小数点エラーが発生すると、次のメッセージが返されることがあります。

関連項目

数値計算ガイド』、ieee_sun(3M)

A.2.25 -fprecision=p

x86: デフォルト以外の浮動小数点精度モードを設定します。

-fprecision オプションを指定すると、FPU (Floating Point Unit) 制御ワードの丸め精度モードのビットが設定されます。これらのビットは、基本演算 (加算、減算、乗算、除算、平方根) の結果をどの精度に丸めるかを制御します。

A.2.25.1 値

p は次のいずれかでなければいけません。

表 A–11 -fprecision の値

意味

single

IEEE 単精度値に丸めます。

double

IEEE 倍精度値に丸めます。

extended

利用可能な最大の精度に丸めます。

psingledouble であれば、丸め精度モードは、プログラムの実行が始まるときに、それぞれ singledouble 精度に設定されます。pextended であるか、-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 の値

意味

nearest

もっとも近い数値に丸め、中間値の場合は偶数にします。

tozero

ゼロに丸めます。

negative

負の無限大に丸めます。

positive

正の無限大に丸めます。

デフォルト

-fround オプションを指定しないと、丸めモードは -fround=nearest になります。

警告

1 つのルーチンを -fround=r でコンパイルした場合は、そのプログラムのすべてのルーチンを同じ -fround=r オプションでコンパイルする必要があります。 そうしないと、予期しない結果が生じることがあります。

このオプションは、メインプログラムをコンパイルするときにだけ有効です。

A.2.27 -fsimple[= n]

浮動小数点最適化の設定を選択します。

このオプションで浮動小数点演算に影響する前提を設けることにより、オプティマイザで行う浮動小数点演算が簡略化されます。

A.2.27.1 値

n を指定する場合、0、1、2 のいずれかにしなければいけません。

表 A–13 -fsimple の値

意味

0

仮定の設定を許可しません。IEEE 754 に厳密に準拠します。

1

安全な簡略化を行います。生成されるコードは IEEE 754 に厳密には準拠していませんが、大半のプログラムの数値結果は変わりありません。

-fsimple=1 の場合、次に示す内容を前提とした最適化が行われます。

  • IEEE 754 のデフォルトの丸めとトラップモードが、プロセスの初期化以後も変わらない。

  • 起こり得る浮動小数点例外を除き、目に見えない結果を出す演算が削除される可能性がある。

  • 無限大数または非数をオペランドとする演算は、その結果に非数を伝える必要がある。 x*0 は 0 によって置き換えられる可能性がある。

  • 演算はゼロの符号を区別しない。

    -fsimple=1 の場合、四捨五入や例外を考慮せずに完全な最適化を行うことは許可されていません。特に浮動小数点演算は、丸めモードを保持した定数について実行時に異なった結果を出す演算に置き換えることはできません。

2

-fsimple=1 のすべての機能に加えて、浮動小数点演算の最適化を積極的に行い、丸めモードの変更によって多くのプログラムが異なった数値結果を出すようになります。たとえば、あるループ内の x/y の演算をすべて x*z に置き換えるような最適化を許可します。この最適化では、x/y はループ内で少なくとも 1 回評価されることが保証されており、yz にはループの実行中に定数値が割り当てられます。

デフォルト

-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

x86: 浮動小数点式の精度を強制的に使用します。

このオプションを指定すると、コンパイラは、次の場合に浮動小数点の式や関数の値を代入式の左辺の型に変換します。つまり、その値はレジスタにそのままの型で残りません。

  • 式や関数を変数に代入する。

  • 式をそれより短い浮動小数点型にキャストする。

このオプションを解除するには、オプション -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%]division

ゼロによる除算をトラップします [しません]。

[no%]inexact

正確でない結果をトラップします [しません]。

[no%]invalid

無効な操作をトラップします [しません]。

[no%]overflow

オーバーフローをトラップします [しません]。

[no%]underflow

アンダーフローをトラップします [しません]。

%all

前述のすべてをトラップします。

%none

前述のどれもトラップしません。

common

無効、ゼロ除算、オーバーフローをトラップします。

[no%] 形式のオプションは、下の例に示すように、%allcommonフラグの意味を変更するときだけ使用します。これは、特定のトラップを明示的に無効にするものではありません。

デフォルト

-ftrap を指定しない場合、コンパイラは -ftrap=%none とみなします。

-ftrap=%all,no%inexact は、inexact を除くすべてのトラップが設定されます。

警告

1 つのルーチンを -ftrap=t オプションでコンパイルした場合は、そのプログラムのルーチンすべてを、-ftrap=t オプションを使用してコンパイルしてください。途中から異なるオプションを使用すると、予想に反した結果が生じることがあります。

-ftrap=inexact のトラップは慎重に使用してください。-ftrap=inexact では、浮動小数点の値が正確でないとトラップが発生します。たとえば、次の文ではこの条件が発生します。


x = 1.0 / 3.0;

このオプションは、メインプログラムをコンパイルするときにだけ有効です。このオプションを使用する際には注意してください。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 (コンパイルのみのオプション) を指定しないと、次のオプションがリンカーに渡されます。

  • -dy

  • -G

  • -R

警告

共有ライブラリの構築には、ld -G ではなく、CC -G を使用してください。こうすると、CC ドライバによって C++ に必要ないくつかのオプションが ld に自動的に渡されます。

-G オプションを使用すると、コンパイラはデフォルトの -l オプションを ld に渡しません。共有ライブラリを別の共有ライブラリに依存させる場合は、必要な -l オプションをコマンド行に渡す必要があります。たとえば、共有ライブラリを libCrun に依存させる場合は、-lCrun をコマンド行に渡す必要があります。

関連項目

-dy-Kpic-xcode=pic13-ztextld(1) のマニュアルページ、「16.3 動的 (共有) ライブラリの構築」

A.2.31 -g

dbx(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-xsanalyzer(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 例


example% CC -G -o libx.so.1 -h libx.so.1 a.o b.o c.o

A.2.35 -help

-xhelp=flags同じです。

A.2.36 -Ipathname

#include ファイル検索パスに pathname を追加します。

このオプションは、インクルードファイルの相対ファイル名 (スラッシュ以外の文字で始まるファイル名) リストに、pathname (パス名) を追加します。

コンパイラは、引用符付きのインクルードファイル (#include "foo.h" の形式) ファイルを次の順序で検索します。

  1. ソースが存在するディレクトリ

  2. -I オプションで指定したディレクトリ内 (存在する場合)

  3. コンパイラで提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの include ディレクトリ

  4. /usr/include ディレクトリ内

コンパイラでは、山括弧をインクルードした (#include <foo.h> 形式の) ファイルを次の順序で検索します。

  1. -I オプションで指定したディレクトリ内 (存在する場合)

  2. コンパイラで提供される C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特殊目的ファイルの include ディレクトリ

  3. /usr/include ディレクトリ内


    注 –

    スペルが標準ヘッダーファイルの名前と一致する場合は、「12.7.5 標準ヘッダーの実装」も参照してください。


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- を使用した結果を示します。


prog.cc
#include "a.h"
#include <b.h>
#include "c.h"
c.h
#ifndef _C_H_1
#define _C_H_1
int c1;
#endif
inc/a.h
#ifndef _A_H
#define _A_H
#include "c.h"
int a;
#endif
inc/b.h
#ifndef _B_H
#define _B_H
#include <c.h>
int b;
#endif
inc/c.h
#ifndef _C_H_2
#define _C_H_2
int c2;
#endif

次のコマンドでは、#include "foo.h" 形式のインクルード文のカレントディレクトリ (インクルードしているファイルのディレクトリ) のデフォルトの検索動作を示します。#include "c.h" ステートメントを inc/a.h で処理するときは、コンパイラで inc サブディレクトリから c.h ヘッダーファイルがインクルードされます。#include "c.h" 文を prog.cc で処理するときは、コンパイラで prog.cc の入っているディレクトリから c.h ファイルがインクルードされます。-H オプションがインクルードファイルのパスを印刷するようにコンパイラに指示していることに注意してください。


example% CC -c -Iinc -H prog.cc
inc/a.h
        inc/c.h
inc/b.h
        inc/c.h
c.h

次のコマンドでは、-I- オプションの影響を示します。コンパイラでは、#include "foo.h" 形式の文を処理するときにインクルードしているディレクトリを最初に探しません。その代わり、-I オプションで名前の付いたディレクトリをコマンド行に表示された順序で検索します。inc/a.h#include "c.h" 文を処理するときは、コンパイラには inc/c.h ヘッダファイルの代わりに ./c.h ヘッダファイルがインクルードされます。


example% CC -c -I. -I- -Iinc -H prog.cc
inc/a.h
        ./c.h
inc/b.h
        inc/c.h
./c.h

相互の関連性

-I- がコマンド行に表示されると、コンパイラではディレクトリが -I 指示に明示的に表示されていないかぎり決してカレントディレクトリを検索しません。この影響は #include "foo.h" 形式のインクルード文にも及びます。

警告

コマンド行の最初の -I- だけが、説明した動作を引き起こします。

コンパイラがインストールされている位置の /usr/include /lib/usr/lib を検索ディレクトリに指定しないでください。

A.2.38 -i

リンカー ldLD_LIBRARY_PATH の設定を無視します。

A.2.39 -inline

-xinline同じです。

A.2.40 -instances=a

テンプレートインスタンスの位置とリンケージを制御します。

A.2.40.1 値

a には次のいずれかを指定します。

表 A–15 -instances の値

意味

extern

必要なすべてのインスタンスをテンプレートリポジトリの comdat セクション内に置き、それらに対して大域リンケージを行います。リポジトリのインスタンスが古い場合は、再びインスタンス化されます。

: コンパイルとリンクを別々に行うとき、コンパイル処理で -instance=extern を指定した場合には、リンク処理でも -instance=extern を指定する必要があります。

explicit

明示的にインスタンス化されたインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。必要なインスタンスがほかにあっても生成しません。

global

必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。

semiexplicit

明示的にインスタンス化されたインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。明示的なインスタンスにとって必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。必要なインスタンスがほかにあっても生成しません。

static

注:-instances=static は非推奨です。-instances=globalstatic の利点をすべて備えており、かつ欠点を備えていないので、-instances=static を使用する理由はなくなっています。このオプションは、このバージョンのコンパイラには存在しない、旧リリースのコンパイラにあった問題を克服するために用意されていました。

必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して静的リンケージを行います。

デフォルト

-instances を指定しないと、-instances=global が使用されます。

関連項目

「7.2.4 テンプレートインスタンスの配置とリンケージ」

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 -KPIC

SPARC: -xcode=pic32 と同じです。

x86: -Kpic と同じです。

このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。

A.2.43 -Kpic

SPARC: -xcode=pic13 と同じです。

x86: 位置に依存しないコードを使ってコンパイルします。

このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して 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.aliblib.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 -libmieee

-xlibmieee と同じです。

A.2.48 -libmil

-xlibmil と同じです。

A.2.49 -library=l[ ,l...]

l に指定した、CC が提供するライブラリを、コンパイルとリンクに組み込みます。

A.2.49.1 値

互換モード (-compat[-4]]) の場合、l には次のいずれかを指定します。

表 A–16 互換モードに使用できる -library オプション

意味

[no%]f77

非推奨。-xlang=f77 を使用してください。

[no%]f90

非推奨。-xlang=f90 を使用してください。

[no%]f95

非推奨。-xlang=f95 を使用してください。

[no%]rwtools7

古い Tools.h++ version 7 を使用します [しません]。

[no%]rwtools7_dbg

デバッグ可能な Tools.h++ version 7 を使用します [しません]。

[no%]complex

複素数の演算に libcomplex を使用します [しません]。

[no%]interval

非推奨。使用しないでください。-xia を使用してください。

[no%]libC

C++ サポートライブラリ libC を使用します [しません]。

[no%]gc

ガベージコレクション libgc を使用します [しません]。

[no%]sunperf

Sun Performance LibraryTM を使用します [しません]。

%none

libC の場合を除いて C++ ライブラリを一切使用しません。

標準モード (デフォルトモード) の場合、l には次のいずれかを指定します。

表 A–17 標準モードに使用できる -library オプション

意味

[no%]f77

非推奨。-xlang=f77 を使用してください。

[no%]f90

非推奨。-xlang=f90 を使用してください。

[no%]f95

非推奨。-xlang=f95 を使用してください。

[no%]rwtools7

古い Tools.h++ version 7 を使用します [しません]。

[no%]rwtools7_dbg

デバッグ可能な Tools.h++ version 7 を使用します [しません]。

[no%]rwtools7_std

標準 iostream Tools.h++ version 7 を使用します [しません]。

[no%]rwtools7_std_dbg

デバッグが可能な標準 iostream Tools.h++ version 7 を使用します [しません]。

[no%]interval

非推奨。使用しないでください。-xia を使用してください。

[no%]iostream

古い iostream ライブラリ libiostream を使用します [しません]。

[no%]Cstd

C++ 標準ライブラリ libCstd を使用します [しません]。コンパイラ付属の C++ 標準ライブラリヘッダーファイルをインクルードします [しません]。

[no%]Crun

C++ 実行時ライブラリ libCrun を使用します [しません]。

[no%]gc

ガベージコレクション libgc を使用します [しません]。

[no%]stlport4

デフォルトの libCstd の代わりに STLport の標準ライブラリの version 4.5.3 を使用します [しません]。STLport の実装の詳細は、「13.3 STLport」を参照してください。

[no%]stlport4_dbg

STLport のデバッグ可能なライブラリを使用します [しません]。

[no%]sunperf

Sun Performance Library を使用します [しません]。

%none

libCrun の場合を除いて C++ ライブラリを使用しません。

デフォルト

  • 互換モード (-compat[=4])

    • -library を指定しない場合は、-library=libC が使用されます。

    • -library=%none または -library=no%libC で特に除外されないかぎり、 libC ライブラリは常に含まれます。

    標準モード (デフォルトモード)

    • -library=%none-library=no%Cstd-library=stlport4 のいずれかで特に除外されないかぎり、libCstd ライブラリは常に含まれます。

    • libCrun ライブラリは常に含まれます。

      -library=%none が指定されたとしても、標準または互換のどちらのモードであるかに関わりなく、libm および libc ライブラリは常に含まれます。

標準モードで libCrun 以外の C++ ライブラリを除外してリンクするには、次のコマンドを使用します。


example% CC -library=%none

標準モードで従来の iosttream と RogueWave tools.h++ ライブラリを使用するには、次のコマンドを使用します。


example% CC -library=rwtools7,iostream

標準モードで標準 の iostream と Rogue Wave tools.h++ ライブラリを使用するコマンドは次のとおりです。


example% CC -library=rwtools7_std

互換モードで従来の iostream と Rogue Wave tools.h++ ライブラリを使用するコマンドは次のとおりです。


example% CC -compat -library=rwtools7

相互の関連性

-library でライブラリを指定すると、適切な -I パスがコンパイルで設定されます。リンクでは、適切な -L-Y P、および -R パスと、-l オプションが設定されます。

このオプションは、置き換えられる代わりに蓄積されます。

区間演算ライブラリを使用するときは、libClibCstd、または 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++ ライブラリオプションの有効もしくは無効な使用法について示します。


% CC -compat -library=rwtools7 foo.cc        <-- 有効
% CC -compat -library=rwtools7_std foo.cc    <-- 無効

% CC -library=rwtools7,iostream foo.cc       <-- 有効、従来の iostream
% CC -library=rwtools7 foo.cc                <-- 無効

% CC -library=rwtools7_std foo.cc            <-- 有効、標準の iostream
% CC -library=rwtools7_std,iostream foo.cc   <-- 無効

libCstdlibiostream の両方を含めた場合は、プログラム内で新旧両方の形式の iostream (例: coutstd::cout) を使用して、同じファイルにアクセスしないよう注意してください。同じプログラム内に標準 iostream と従来の iostream が混在し、その両方のコードから同じファイルにアクセスすると、問題が発生する可能性があります。

libC とも libCrun ともリンクしないプログラムは、C++ のすべての機能を使用できないことがあります。

-xnolib を指定すると、-library は無視されます。

警告

別々の手順でコンパイルしてリンクする場合は、コンパイルコマンドに表示される一連の -library オプションをリンクコマンドにも表示する必要があります。

stlport4Cstd、および 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 -misalign

SPARC: 通常はエラーになる、メモリー中の境界整列の誤ったデータを許可します。次に例を示します。


char b[100];
int f(int * ar) {
return *(int *) (b +2) + *ar;
}

このオプションは、プログラムの中に正しく境界整列されていないデータがあることをコンパイラに知らせます。したがって、境界整列が正しくない可能性があるデータに対しては、ロードやストアを非常に慎重に、つまり 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 がプリプロセッサに渡され、-lthreadld に正しい順番で渡されます。

アプリケーションやライブラリがマルチスレッド化されている場合は、-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 を使用してください。 そうしないと、予期しない結果が発生する可能性があります。


example% CC -c -mt myprog.cc
example% CC -mt myprog.o

並列の Fortran オブジェクトを C++ オブジェクトと混合している場合は、リンク行に -mt オプションを指定する必要があります。

C99 サポートは互換モード (-compat=4) で使用できません。

関連項目

-xnolib「10.5 メンバー変数のキャッシュ」、『マルチスレッドのプログラミング』、『リンカーとライブラリ

A.2.56 -native

-xtarget=native と同じです。

A.2.57 -noex

-features=no%except同じです。

A.2.58 -nofstore

x86: 強制された式の精度を無効にします。

このオプションを指定すると、次のどちらの場合でも、コンパイラは浮動小数点の式や関数の値を代入式の左辺の型に変換しません。 つまり、レジスタの値はそのままです。

  • 式や関数を変数に代入する 標準モード (デフォルトモード) では、libthread が libCrun よりも前にリンクされるようにします。

    または

  • 式や関数をそれより短い浮動小数点型にキャストする

A.2.58.1 関連項目

-fstore

A.2.59 -nolib

-xnolib同じです。

A.2.60 -nolibmil

-xnolibmil同じです。

A.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 -Olevel

-xOlevel同じです。

A.2.65 -o filename

出力ファイルまたは実行可能ファイルの名前を filename (ファイル名) に指定します。

A.2.65.1 相互の関連性

コンパイラは、テンプレートインスタンスを格納する必要がある場合には、出力ファイルのディレクトリにあるテンプレートリポジトリに格納します。たとえば、次のコマンドでは、コンパイラはオブジェクトファイルを ./sub/a.o に、テンプレートインスタンスを ./sub/SunWS_cache 内のリポジトリにそれぞれ書き込みます。


example% CC -o sub/a.o a.cc

コンパイラは、読み込むオブジェクトファイルに対応するテンプレートリポジトリからテンプレートインスタンスを読み取ります。たとえば、次のコマンドでは、コンパイラは ./sub1/SunWS_Cache./sub2/SunWS_cache から読み取り、必要な場合は ./SunWS_cache に書き込みます。


example% CC sub1/a.o sub2/b.o

詳細は、「7.4 テンプレートリポジトリ」を参照してください。

警告

このファイル名には、コンパイラが作成するファイルの型に合った接尾辞を指定してください。また、CC ドライバはソースファイルには上書きしないため、ソースファイルとは異なるファイルを指定する必要があります。

A.2.66 +p

標準に従っていないプリプロセッサの表明を無視します。

A.2.66.1 デフォルト

+p を指定しないと、コンパイラは非標準のプリプロセッサの表明を認識します。

相互の関連性

+p を指定している場合は、次のマクロは定義されません。

  • sun

  • unix

  • sparc

  • i386

A.2.67 -P

ソースの前処理だけでコンパイルはしません (接尾辞 .i のファイルを出力します)。

このオプションを指定すると、プリプロセッサが出力するような行番号情報はファイルに出力されません。

A.2.67.1 関連項目

-E

A.2.68 -p

廃止。「A.2.157 -xpgを参照してください。

A.2.69 -pentium

x86: -xtarget=pentium と置き換えられています。

A.2.70 -pg

-xpg同じです。

A.2.71 -PIC

SPARC: -xcode=pic32 と同じです。

x86: -Kpic と同じです。

A.2.72 -pic

SPARC: -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 の値

SPARC

x86

ccfe

ccfe

iropt

cg386

cg

codegen

CClink

CClink

ld

ld

次に示すコマンド行では、ldCC ドライバによって起動されたとき、-Qoption で指定されたオプションの -i-mld に渡されます。


example% CC -Qoption ld -i,-m test.c

警告

意図しない結果にならないように注意してください。次に例を示します。


-Qoption ccfe -features=bool,iddollar

しかしこの指定は、意図に反して次のように解釈されてしまいます。


-Qoption ccfe -features=bool -Qoption ccfe iddollar

正しい指定は次のとおりです。


-Qoption ccfe -features=bool,-features=iddollar

A.2.79 -qoption phase option

-Qoption と同じです。

A.2.80 -qp

-p同じです。

A.2.81 -Qproduce sourcetype

CC ドライバに sourcetype (ソースタイプ) 型のソースコードを生成するよう指示します。

sourcetype に指定する接尾辞の定義は次のとおりです。

表 A–19 -Qproduce の値

拡張子

意味

.i

ccfe が作成する前処理済みの C++ のソースコード

.o

コードジェネレータが作成するオブジェクトファイル

.s

cg が作成するアセンブラソース

A.2.82 -qproduce sourcetype

-Qproduce と同じです。

A.2.83 -Rpathname[ :pathname…]

動的ライブラリの検索パスを実行可能ファイルに組み込みます。

このオプションは ld に渡されます。

A.2.83.1 デフォルト

-R オプションを指定しないと、出力オブジェクトに記録され、実行時リンカーに渡されるライブラリ検索パスは、-xarch オプションで指定されたターゲットアーキテクチャー命令によって異なります (-xarch を指定しないと、-xarch=generic が使用されます)。

デフォルトのライブラリ検索パス

v9v9av9b

install-directory/SUNWspro/lib/v9

上記以外の値

install-directory/SUNWspro/lib

標準インストールでは、install-directory/opt です。

相互の関連性

このオプションは、置き換えられる代わりに蓄積されます。

LD_RUN_PATH 環境変数が設定されている場合に、-R オプションを指定すると、-R に指定したパスが検索され、LD_RUN_PATH のパスは無視されます。

関連項目

-norunpath、『リンカーとライブラリ

A.2.84 -readme

-xhelp=readme同じです。

A.2.85 -S

コンパイルしてアセンブリコードだけを生成します。

CC ドライバはプログラムをコンパイルして、アセンブリソースファイルを作成します。 しかし、プログラムのアセンブルは行いません。このアセンブリソースファイル名には、.s という接尾辞が付きます。

A.2.86 -s

実行可能ファイルからシンボルテーブルを取り除きます。

出力する実行可能ファイルからシンボリック情報をすべて削除します。このオプションは ld に渡されます。

A.2.87 -sb

-xsb置き換えられています。

A.2.88 -sbfast

-xsbfast同じです。

A.2.89 -staticlib=l[ ,l…]

-library オプションで指定されている C++ ライブラリ (そのデフォルトも含む)、-xlang オプションで指定されているライブラリ、-xia オプションで指定されているライブラリのうち、どのライブラリが静的にリンクされるかを指定します。

A.2.89.1 値

l には、次の値のいずれか 1 つを指定します。

表 A–20 -staticlib の値

意味

[no%]library

library を静的にリンクします [しません]。library に有効な値は、-library で有効なすべての値 (%all%none を除く)、-xlang で有効なすべての値、および (-xia に関連して使用される) interval です。

%all

-library オプションで指定されているすべてのライブラリと、-xlang オプションで指定されているすべてのライブラリ、-xia をコマンド行で指定している場合は区間ライブラリを静的にリンクします。

%none

-library オプションと -xlang オプションに静的に指定されているライブラリをリンクしません。-xia をコマンド行に指定した場合は、区間ライブラリを静的にリンクしません。

デフォルト

-staticlib を指定しないと、-staticlib=%none が使用されます。

-library のデフォルト値は Crun であるため、次のコマンド行は、libCrun を静的にリンクします。


example% CC -staticlib=Crun (正しい)

これに対し、次のコマンド行は libgc をリンクしません。これは、-library オプションで明示的に指定しないかぎり、libgc はリンクされないためです。


example% CC -staticlib=gc (誤り)

libgc を静的にリンクするには、次のコマンドを使用します。


example% CC -library=gc -staticlib=gc (正しい)

次のコマンドは、librwtool ライブラリを動的にリンクします。librwtool はデフォルトのライブラリでもなく、-library オプションでも選択されていないため、-staticlib の影響はありません。


example% CC -lrwtool -library=iostream \
-staticlib=rwtools7 (誤り)

次のコマンドは、librwtool ライブラリを静的にリンクします。


example% CC -library=rwtools7,iostream -staticlib=rwtools7 (正しい)

次のコマンドは、Sun Performance Library を動的にリンクします。これは、-staticlib オプションを Sun Performance Library のライブラリのリンクに反映させるために -library=sunperf-staticlib=sunperf に関連させて使用する必要があるからです。


example% CC -xlic_lib=sunperf -staticlib=sunperf (誤り)
次のコマンドは、Sun Performance Library を静的にリンクします。

example% CC -library=sunperf -staticlib=sunperf (正しい)

相互の関連性

このオプションは、置き換えられる代わりに蓄積されます。

-staticlib オプションは、-xia-xlang および -library オプションで明示的に選択された C++ ライブラリ、または、デフォルトで暗黙的に選択された C++ ライブラリだけに機能します。互換モードでは (-compat=[4])、libC がデフォルトで選択されます。標準モードでは (デフォルトのモード)、CstdCrun がデフォルトで選択されます。

-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 が設定されます。

次の例について考えてみましょう。


#include <stdio.h>
#include <iostream>
int main()
{
   std::cout << "Hello ";
   printf("beautiful ");
   std::cout << "world!";
   printf("\n");
}

同期が有効な場合は、1 行だけ出力されます。


Hello beautiful world!

同期なしの場合、出力が混乱します。

警告

このオプションは、ライブラリではなく実行可能ファイルのリンクでのみ有効です。

A.2.91 -temp=path

一時ファイルのディレクトリを定義します。

コンパイル中に生成される一時ファイルを格納するディレクトリのパス名を指定します。

A.2.91.1 関連項目

-keeptmp

A.2.92 -template=opt[ ,opt…]

さまざまなテンプレートオプションを有効/無効にします。

A.2.92.1 値

opt は次のいずれかの値である必要があります。

表 A–21 -template の値

意味

[no%]extdef

別のソースファイルからテンプレート定義を検索します [しません]。

[no%]geninlinefuncs

明示的にインスタンス化されたクラステンプレートのための非参照インラインメンバー関数を生成します [しません]。

[no%]wholeclass

コンパイラに対し、使用されている関数だけインスタンス化するのではなく、テンプレートクラス全体をインスタンス化する [しない] ように指示します。クラスの少なくとも 1 つのメンバーを参照しなければいけません。 そうでない場合は、コンパイラはそのクラスのどのメンバーもインスタンス化しません。

デフォルト

-template オプションを指定しないと、-template=no%wholeclass,extdef が使用されます。

次のコードについて考えてみましょう。


example% cat Example.cc
     template <class T> struct S {
               void imf() {}
               static void smf() {}
     };

     template class S <int>;

     int main() {
     }
example%

-template=geninlinefuncs を指定した場合、S の 2 つのメンバー関数は、プログラム内で呼び出されなくてもオブジェクトファイルに生成されます。


example% CC -c -template=geninlinefuncs Example.cc
example% nm -C Example.o

Example.o:

[Index] Value Size Type  Bind  Other Shndx Name
[5]       0   0    NOTY  GLOB  0     ABS   __fsr_init_value
[1]       0   0    FILE  LOCL  0     ABS   b.c
[4]      16   32   FUNC  GLOB  0     2     main
[3]     104   24   FUNC  LOCL  0     2     void S<int>::imf()
                                           [__1cBS4Ci_Dimf6M_v_]
[2]     64    20   FUNC  LOCL  0     2     void S<int>::smf()
                                           [__1cBS4Ci_Dsmf6F_v_]

関連項目

「7.2.2 全クラスインスタンス化」「7.5 テンプレート定義の検索」

A.2.93 -time

-xtime と同じです。

A.2.94 -Uname

プリプロセッサシンボル name の初期定義を削除します。

このオプションは、コマンド行に指定された (CC ドライバによって暗黙的に挿入され るものも含む) -D オプションによって作成されるマクロシンボル name の初期定義を削除します。ほかの定義済みマクロや、ソースファイル内のマクロ定義が影響を受けることはありません。

CC ドライバにより定義される -D オプションを表示するには、コマンド行に -dryrun オプションを追加します。

A.2.94.1 例

次のコマンドでは、事前に定義されているシンボル __sun を未定義にします。#ifdef (__sun) のような foo.cc 中のプリプロセッサ文では、シンボルが未定義であると検出されます。


example% CC -U__sun foo.cc

相互の関連性

コマンド行には複数の -U オプションを指定できます。

すべての -U オプションは、存在している任意の -D オプションのあとに処理されます。つまり、同じ name がコマンド行上の -D-U の両方に指定されている場合は、オプションが表示される順序にかかわらず name は未定義になります。

関連項目

-D

A.2.95 -unroll=n

-xunroll=n同じです。

A.2.96 -V

-verbose=version と同じです。

A.2.97 -v

-verbose=diags同じです。

A.2.98 -vdelx

非推奨。使用しないでください。

互換モード (-compat[=4]) のみ

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 の値

意味

[no%]diags

各コンパイル段階が渡すコマンド行を表示します [しません]。

[no%]template

テンプレートインスタンス化冗長モード (「検証モード」ともいう) を起動します [しません]。冗長モードはコンパイル中にインスタンス化の各段階の進行を表示します。

[no%]version

CC ドライバに対し、呼び出したプログラムの名前とバージョン番号を表示するよう指示します [しません]。

%all

前述のすべてを呼び出します。

%none

-verbose=%none-verbose=no%template,no%diags,no%version を指定することと同じです。

デフォルト

-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=tcovtcov(1) のマニュアルページ、『プログラムのパフォーマンス解析

A.2.105 -xalias_level[= n]

(SPARC) C++ コンパイラで次のコマンドを指定して、型に基づく別名の解析および最適化を実行することができます。

  • -xalias_level[=n ]

    ここで、n には anysimplecompatible のいずれかを指定します。

  • -xalias_level=any

    このレベルの解析では、ある型を別名で定義できるとものとして処理されます。ただしこの場合でも、一部の最適化が可能です。

  • -xalias_level=simple

    単純型は別名で定義されていないものとして処理されます。次の単純型のいずれかの動的な型である記憶オブジェクトの場合を説明します。

char

short int

long int

float

signed char

unsigned short int

unsigned long int

double

unsigned char

int

long long int

long double

wchar_t

unsigned int

unsigned long long int

enumeration types

データポインタ型

関数ポインタ型

データメンバーのポインタ型

関数メンバーのポインタ型

これらは、次の型の lvalue を使用してだけアクセスされます。

  • オブジェクトの動的な型

    • オブジェクトの動的な型を constant または volatile で修飾したもの。 つまり、オブジェクトの動的な型に相当する符号付きまたは符号なしの型。

    • オブジェクトの動的な型を constant または volatile で修飾したものに相当する、符号付きまたは符号なしの型。

    • 前述の型のいずれかがメンバーに含まれる集合体または共用体 (再帰的に、その下位の集合体またはそれに含まれる共用体のメンバーについても該当します)。

    • char 型または unsigned char 型

    -xalias_level=compatible

    配置非互換の型は、別名で定義されていないものとして処理されます。記憶オブジェクトは、次の型の lvalue を使用してだけアクセスされます。

    • オブジェクトの動的な型

    • オブジェクトの動的な型を constant または volatile で修飾したもの。 つまり、オブジェクトの動的な型に相当する符号付きまたは符号なしの型。

    • オブジェクトの動的な型を constant または volatile で修飾したものに相当する、符号付きまたは符号なしの型。

    • 前述の型のいずれかがメンバーに含まれる集合体または共用体 (再帰的に、その下位の集合体またはそれに含まれる共用体のメンバーについても該当します)。

    • オブジェクトの動的な型の (多くの場合は constant または volatile で修飾した) 基本クラス型。

    • char 型または unsigned char 型

      コンパイラでは、すべての参照の型が、相当する記憶オブジェクトの動的な型と配置互換であるものと見なされます。2 つの型は、次の条件の場合に配置互換になります。

    • 2 つの型が同一の型の場合は、配置互換になります。

    • 2 つの型の違いが、修飾が constant か volatile かの違いだけの場合は、配置互換になります。

    • 符号付き整数型それぞれに、それに相当する (ただしそれとは異なる) 符号なし整数型があります。これらの相当する型は配置互換になります。

    • 2 つの列挙型は、基礎の型が同一の場合に配置互換になります。

    • 2 つの Plain Old Data (POD) 構造体型は、メンバー数が同一で、順序で対応するメンバーが配置互換である場合に配置互換になります。

    • 2 つの POD 共用体型は、メンバー数が同一で、対応するメンバー (順番は任意) が配置互換である場合に配置互換になります。

      参照は、一部の場合に、記憶オブジェクトの動的な型と配置非互換になります。

    • POD 共用体に、開始シーケンスが共通の POD 構造体が複数含まれていて、その POD 共用体オブジェクトにそれらの POD 構造体のいずれかが含まれている場合は、任意の POD 構造体の共通の開始部分を調べることができます。2 つの POD 構造体が共通の開始シーケンスを共有していて、対応するメンバーの型が配置互換であり、開始メンバーのシーケンスでビットフィールドの幅が同一の場合に、2 つの POD 構造体は開始シーケンスが共通になります。

    • reinterpret_cast を使用して正しく変換した POD 構造体オブジェクトへのポインタは、その最初のメンバーを示します。 そのメンバーがビットフィールドの場合は、そのビットフィールドのあるユニットを示します。

A.2.105.1 デフォルト

-xalias_level を指定しない場合は、コンパイラでは -xalias_level=any が指定されます。-xalias_level を値なしで指定した場合は、コンパイラでは -xalias_level=compatible が指定されます。

相互の関連性

コンパイラは、-xO2 以下の最適化レベルでは、型に基づく別名の解析および最適化を実行しません。

警告

reinterpret_cast またはこれに相当する旧形式のキャストを使用している場合には、解析の前提にプログラムが違反することがあります。また、次の例にあるような共用体の型のパンニングも、解析の前提に違反します。


union bitbucket{
  int i;
  float f;
};

int bitsof(float f){
bitbucket var;
var.f=3.6;
return var.i;
}

A.2.106 -xar

アーカイブライブラリを作成します。

テンプレートを使用する C++ のアーカイブをコンパイルするときには通常、テンプレートデータベース中でインスタンス化されたテンプレート関数をそのアーカイブの中にあらかじめ入れておく必要があります。このオプションはそれらのテンプレートを必要に応じてアーカイブに自動的に追加します。

A.2.106.1 値

-xar を指定すると、ar -c -r が起動され、アーカイブがゼロから作成されます。

次のコマンド行は、ライブラリファイルとオブジェクトファイルに含まれるテンプレート関数をアーカイブします。


example% CC -xar -o libmain.a a.o b.o c.o

警告

テンプレートデータベースの .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 のフラグ

フラグ

意味

generic

ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルト値です。

generic64

多くのシステムで良好な 64 ビットパフォーマンスを得るためのコンパイルをします(Solaris のみ)。

このオプションは -m64 -xarch=generic に相当し、以前のリリースとの互換性のために用意されています。64 ビットでのコンパイルを指定するには、-xarch=generic64 ではなく -m64 を使用してください。

native

このシステムで良好なパフォーマンスを得られるようにコンパイルします。コンパイラは、コンパイルが実行されている現在のシステムプロセッサに適した設定を選択します。

native64

このシステムで良好なパフォーマンスを得られるようにコンパイルします (Solaris のみ)。このオプションは -m64 -xarch=native に相当し、以前のリリースとの互換性のために用意されています。

sparc

SPARC-V9 ISA 用のコンパイルを実行しますが、VIS (Visual Instruction Set) は使用せず、その他の実装に固有の ISA 拡張機能も使用しません。V9 ISA 上で良好なパフォーマンスを得るためのコードを生成します。

sparcvis

SPARC-V9 + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能用のコンパイルを実行します。このオプションを使用すると、コンパイラは、UltraSPARC アーキテクチャー上で良好なパフォーマンスが得られるようにコードを生成することができます。

sparcvis2

UltraSPARC アーキテクチャー + VIS (Visual Instruction Set) version 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。

sparcfmaf

SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0 を含む UltraSPARC-III 拡張機能、および浮動小数点積和演算用の SPARC64 VI 拡張機能の命令をコンパイラが使用できるようになります。

-xarch=sparcfmaf fma=fused と組み合わせて使用し、ある程度の最適化レベルを指定することで、コンパイラが自動的に積和命令の使用を試みるようにする必要があります。

v7

SPARC-V7 ISA 用にコンパイルします。(廃止)

最新の Solaris オペレーティングシステムは、SPARC V7 アーキテクチャーをサポートしていません。このオプションを付けてコンパイルしたプログラムは、最新のプラットフォームで実行速度が低下します。

デフォルトは -xarch=v8plus です。

例: SPARCstation 1、SPARCstation 2

v8a

V8a 版の SPARC-V8 ISA 用にコンパイルします。定義上、V8a は V8 ISA を意味します。ただし、fsmuld 命令は含まれていません。

このオプションを使用すると、コンパイラは、V8 a ISA 上で良好なパフォーマンスが得られるようにコードを生成することができます。

例: microSPARC I チップアーキテクチャーに基づくすべてのシステム

v8

SPARC-V8 ISA 用にコンパイルします。V8 アーキテクチャー上で良好なパフォーマンスを得るためのコードを生成します。例: SPARCstation 10

v8plus

V8plus 版の SPARC-V9 ISA 用にコンパイルします。定義上、V8plus は V9 ISA を意味します。 ただし、V8plus ISA 仕様で定義されている 32 ビットサブセットに限定されます。 さらに、VIS (Visual Instruction Set) と実装に固有な ISA 拡張機能は含まれていません。

  • このオプションを使用すると、コンパイラは、V8plus ISA 上で良好なパフォーマンスが得られるようにコードを生成することができます。

  • 生成されるオブジェクトコードは SPARC-V8 + ELF32 形式であり、Solaris UltraSPARC 環境でのみ実行できます。 つまり、V7 または V8 のプロセッサ上では実行できません。

    例: UltraSPARC チップアーキテクチャーに基づく任意のシステム

v8plusa

V8plusa 版の SPARC-V9 ISA 用にコンパイルします。定義上、V8plusa V8plus アーキテクチャー + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能を意味します。

  • UltraSPARC アーキテクチャー上で良好なパフォーマンスを得るためのコードを生成します。 ただし、V8plus 仕様で定義されている 32 ビットサブセットに限定されます。

  • 生成されるオブジェクトコードは SPARC-V8 + ELF32 形式であり、Solaris UltraSPARC 環境でのみ実行できます。 つまり、V7 または V8 のプロセッサ上では実行できません。

    例: UltraSPARC チップアーキテクチャーに基づくすべてのシステム

v8plusb

UltraSPARC-III 拡張機能を持つ、V8plusb 版の SPARC-V8plus ISA 用にコンパイルします。

UltraSPARC アーキテクチャー + VIS (Visual Instruction Set) version 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。

  • 生成されるオブジェクトコードは SPARC-V8 + ELF32 形式です。Solaris UltraSPARC-III 環境でのみ実行できます。

  • UltraSPARC-III アーキテクチャー上で良好なパフォーマンスを得るための最良のコードを使用します。

v9

-m64 -xarch=sparc に相当します。64 ビットメモリーモデルを得るために -xarch=v9 を使用する古いメイクファイルとスクリプトでは、-m64 だけを使用すれば十分です。

v9a

-m64 -xarch=sparcvis に相当し、以前のリリースとの互換性のために用意されています。

v9b

-m64 -xarch=sparcvis2 に相当し、以前のリリースとの互換性のために用意されています。

また、次のことにも注意してください。

  • SPARC 命令セットアーキテクチャー V8 および V8a はバイナリ互換です。

  • v8plus でコンパイルされたオブジェクトバイナリ (.o) ファイルと v8plusa でコンパイルされた .o ファイルは、SPARC V8plusa 互換のプラットフォーム上でのみリンクして実行できます。

  • v8plusv8plusa、および v8plusb でそれぞれコンパイルされたオブジェクトバイナリ (.o) ファイルは、SPARC V8plusb 互換のプラットフォーム上でのみリンクして実行できます。

  • -xarch の値、v9、v9a、および v9b は、UltraSPARC 64 ビット Solaris オペレーティングシステムにしか使用できません。

  • generic64native64v9v9a でそれぞれコンパイルされたオブジェクトバイナリ (.o) ファイルは、SPARC V9a 互換プラットフォーム上でのみリンクおよび同時に実行できます。

  • generic64native64v9v9a、および v9b でそれぞれコンパイルされたオブジェクトバイナリ (.o) ファイルは、SPARC V9b 互換プラットフォーム上でのみリンクおよび同時に実行できます。

オプションの選択によっては、生成された実行可能プログラムのパフォーマンスが、初期のアーキテクチャーよりかなり劣ることがあります。また、4 倍精度 (REAL*16 および long double) 浮動小数点命令は、これらの命令セットアーキテクチャーの多くで使用できますが、コンパイラは、それらの命令を生成したコードで使用しません。

x86 での -xarch のフラグ

次の表に、x86 プラットフォームでの -xarch フラグを示します。

表 A–24 x86 での -xarch のフラグ

フラグ

意味

386

命令セットを 386/486 アーキテクチャーに限定します。

amd64

-m64 -xarch=sse2 に相当します (Solaris のみ)。64 ビットメモリーモデルを得るために -xarch=amd64 を使用する古いメイクファイルとスクリプトでは、-m64 だけを使用すれば十分です。

amd64a

-m64 -xarch=sse2a に相当します (Solaris のみ)。

generic

ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルト値です。

generic64

多くのシステムで良好な 64 ビットパフォーマンスを得るためのコンパイルをします(Solaris のみ)。

このオプションは -m64 -xarch=generic に相当し、以前のリリースとの互換性のために用意されています。64 ビットでのコンパイルを指定するには、-xarch=generic64 ではなく -m64 を使用してください。

native

このシステムで良好なパフォーマンスを得られるようにコンパイルします。現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。

native64

このシステムで良好なパフォーマンスを得られるようにコンパイルします (Solaris のみ)。このオプションは -m64 -xarch=native に相当し、以前のリリースとの互換性のために用意されています。

pentium_pro

命令セットを 32 ビット pentium_pro アーキテクチャーに限定します。

pentium_proa

AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット pentium_pro アーキテクチャーに追加します。

sse

SSE 命令セットを pentium_pro アーキテクチャーに追加します。

ssea

AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE アーキテクチャーに追加します。

sse2

SSE2 命令セットを pentium_pro アーキテクチャーに追加します。

sse2a

AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE2 アーキテクチャーに追加します。

sse3

SSE3 命令セットを SSE2 命令セットに追加します。

x86 で特に注意すべき点

x86 Solaris プラットフォーム用にコンパイルするときは、注意すべき重要な問題がいくつかあります。

古い Sun 形式の並列化プログラムは x86 で使用できません。代わりに OpenMP を使用してください。古い並列化命令を OpenMP に変換する方法については、『Sun Studio 12: OpenMP API User’s Guide』を参照してください。

-xarchssesse2sse2a、または 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 より優先されます。


example% CC -xtarget=ultra2 -xarch=v8plusb foo.cc

-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.151 -xopenmp[= i]」

A.2.109 -xbinopt={prepare| off}

(SPARC) あとで 最適化、変換、分析を行うために、バイナリを準備するようコンパイラに命令します。binopt(1) を参照してください。このオプションは、実行可能ファイルまたは共有オブジェクトの構築に使用できます。コンパイルとリンクを別々に行う場合は、両方の手順に -xbinopt を指定する必要があります。


example% cc -c -xO1 -xbinopt=prepare a.c b.c
example% cc -o myprog -xbinopt=prepare a.o

一部のソースコードがコンパイルに使用できない場合も、このオプションを使用してそのほかのコードがコンパイルされます。このとき、最終的なバイナリを作成するリンク手順で、このオプションを使用する必要があります。この場合、このオプションでコンパイルされたコードだけが最適化、変換、分析できます。

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 が取り込まれます。

次のコンパイラコマンドでは、標準ライブラリ呼び出しを特殊処理するように要求します。


example% CC -xbuiltin -c foo.cc

次のコンパイラコマンドでは、標準ライブラリ呼び出しを特殊処理しないように要求します。マクロ -fast の拡張には -xbuiltin=%all が取り込まれていることに注意してください。


example% CC -fast -xbuiltin=%none -c foo.cc

A.2.111 -xcache=c

オプティマイザ用のキャッシュ特性を定義します。この定義によって、特定のキャッシュが使用されるわけではありません。


注 –

このオプションは単独でも使用できますが、-xtarget オプションが展開されたものの一部です。このオプションの主な目的は、-xtarget オプションにより指定される値を変更することです。


このリリースで、キャッシュを共有できるスレッド数を指定するオプションの特性 [/ti] が導入されました。

A.2.111.1 値

c には次の値のいずれかを指定します。

表 A–25 -xcache の値

意味

generic

これはデフォルトです。ほとんどの SPARC プロセッサに良好なパフォーマンスを提供し、どの x86、SPARC の各プロセッサでも著しいパフォーマンス低下が生じないようなキャッシュ特性を使用するように、コンパイラに指示します。

これらの最高のタイミング特性は、新しいリリースごとに、必要に応じて調整されます。

native

ホスト環境に対して最適化されたパラメータを設定します。

s1/l1/a1[/t1]

レベル 1 のキャッシュ属性を定義します。

s1/l1/a1[/t1]:s2/l2/a2[/t2]

レベル 1 とレベル 2 のキャッシュ属性を定義します。

s1/l1/a1[/t1]:s2/l2/a2[/t2]:s3/l3/a3[/t3]

レベル 1、レベル 2、レベル 3 のキャッシュ属性を定義します。

キャッシュ属性 si/li/ai/ti の定義は、次のとおりです。

属性

定義

si

レベル i のデータキャッシュのサイズ (K バイト単位)

li

レベル i のデータキャッシュのラインサイズ (バイト単位)

ai

レベル i のデータキャッシュの結合規則

たとえば、i=1 は、レベル 1 のキャッシュ属性の s1/l1/a1 を意味します。

デフォルト

-xcache を指定しないと、 -xcache=generic がデフォルトで使用されます。この値を指定すると、ほとんどの SPARC プロセッサで良好なパフォーマンスが得られ、どのプロセッサでも顕著なパフォーマンスの低下がないキャッシュ属性がコンパイラで使用されます。

t の値を指定しない場合のデフォルトは 1 です。

-xcache=16/32/4:1024/32/1 の設定内容は、次のとおりです。

レベル 1 のキャッシュ

レベル 2 のキャッシュ

16K バイト

1024K バイト

ラインサイズ 32 バイト

ラインサイズ 32 バイト

4 ウェイアソシアティブ

直接マップ結合

関連項目

-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 の値

意味

signed

char 型で定義された文字定数および変数を符号付きとして処理します。コンパイル済みコードの動作に影響しますが、ライブラリルーチンの動作には影響しません。

s

signed と同義です。

unsigned

char 型で定義された文字定数および変数を符号なしとして処理します。コンパイル済みコードの動作に影響しますが、ライブラリルーチンの動作には影響しません。

u

unsigned と同義です。

デフォルト

-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 の値

意味

%all

チェックをすべて実行します。

%none

チェックを実行しません。

stkovf

スタックオーバーフローのチェックをオンにします。

no%stkovf

スタックオーバーフローのチェックをオフにします。

デフォルト

-xcheck を指定しない場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。

引数を指定せずに -xcheck を使用した場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。

-xcheck オプションは、コマンド行で累積されません。コンパイラは、コマンドで最後に指定したものに従ってフラグを設定します。

A.2.115 -xchip=c

オプティマイザが使用するターゲットとなるプロセッサを指定します。

ターゲットとなるプロセッサを指定することによって、タイミング属性を指定します。このオプションは次のものに影響を与えます。

  • 命令の順序 (スケジューリング)

  • コンパイラが分岐を使用する方法

  • 意味が同じもので代用できる場合に使用する命令


    注 –

    このオプションは単独でも使用できますが、-xtarget オプションが展開されたものの一部です。このオプションの主な目的は、-xtarget オプションにより指定される値を変更することです。


A.2.115.1 値

c には次の値のいずれかを指定します。

表 A–28 -xchip の値

プラットフォーム

タイミング属性を使用する意味

SPARC

generic

SPARC プロセッサ上で良好なパフォーマンスを得るための、タイミング属性プロセッサ

native

現在コンパイルを実行しているシステム上で良好なパフォーマンスを得るため

old

SuperSPARC プロセッサより古いプロセッサの

タイミング属性

sparc64vi

SPARC64 VI プロセッサのタイミング属性

super

SuperSPARC プロセッサのタイミング属性

super2

SuperSPARC II プロセッサのタイミング属性

micro

MicroSPARC プロセッサのタイミング属性

micro2

MicroSPARC II プロセッサのタイミング属性

hyper

HyperSPARC プロセッサのタイミング属性

hyper2

HyperSPARC II プロセッサのタイミング属性

powerup

Weitek PowerUp プロセッサのタイミング属性

ultra

UltraSPARC プロセッサのタイミング属性

ultra2

UltraSPARC II プロセッサのタイミング属性

ultra2e

UltraSPARC IIe プロセッサのタイミング属性

ultra2i

UltraSPARC IIe プロセッサのタイミング属性

ultra3

UltraSPARC IIe プロセッサのタイミング属性

ultra3cu

UltraSPARC III Cu プロセッサのタイミング属性

ultra3i

UltraSparc IIIi プロセッサのタイミング属性

ultra4

UltraSparc IV プロセッサのタイミング属性

ultra4plus

UltraSPARC IVplus プロセッサのタイミング属性

ultraT1

UltraSPARC T1 プロセッサのタイミング属性

ultraT2

UltraSPARC T2 プロセッサのタイミング属性

x86

generic

大部分の x86 プロセッサのタイミング属性

386

Intel 386 プロセッサのタイミング属性

486

Intel 486 プロセッサのタイミング属性

pentium

Intel Pentium プロセッサのタイミング属性

pentium_pro

Intel Pentium Pro チップのタイミング属性

pentium3

Intel Pentium 3 プロセッサのタイミング属性

pentium4

Intel Pentium 4 プロセッサのタイミング属性

デフォルト

ほとんどの SPARC プロセッサでは、デフォルト値の generic を使用すれば、どのプロセッサでもパフォーマンスの著しい低下がなく、良好なパフォーマンスが得られる最良のタイミング属性がコンパイラで使用されます。

A.2.116 -xcode=a

SPARC: コードのアドレス空間を指定します。


注 –

共有オブジェクトの構築では、-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 の値

意味

abs32

32 ビット絶対アドレスを生成します。 高速ですが範囲が限定されます。コード、データ、および bss を合計したサイズは 2**32 バイトに制限されます。

abs44

SPARC: 44 ビット絶対アドレスを生成します。中程度の速さで中程度の範囲を使用できます。コード、データ、および bss を合計したサイズは 2**44 バイトに制限されます。64 ビットのアーキテクチャーでのみ利用できます。動的 (共有) ライブラリで使用しないでください。

abs64

SPARC: 64 ビット絶対アドレスを生成します。 低速ですが範囲は制限されません。64 ビットのアーキテクチャーでのみ利用できます。

pic13

位置に依存しないコード (小規模モデル) を生成します。 高速ですが範囲が限定されます。-Kpic と同義です。32 ビットアーキテクチャーでは最大 2**11 個の固有の外部シンボルを、64 ビットでは 2**10 個の固有の外部シンボルをそれぞれ参照できます。

pic32

位置に依存しないコード (大規模モデル) を生成します。 低速ですが全範囲を使用できます。-KPIC と同義です。32 ビットアーキテクチャーでは最大 2**30 個の固有の外部シンボルを、64 ビットでは 2**29 個の固有の外部シンボルをそれぞれ参照できます。

-xcode=pic13 または -xcode=pic32 のどちらを使用すべきか決定するときは、 elfdump -c (詳細は elfdump(1) のマニュアルページを参照) を使用することによって、セクションヘッダー (sh_name: .got) を探して、大域オフセットテーブル (GOT) のサイズを調べてください。sh_size 値が GOT のサイズです。GOT のサイズが 8,192 バイトに満たない場合は -xcode=pic13、そうでない場合は -xcode=pic32 を指定します。

一般に、-xcode の使用方法の決定に際しては、次のガイドラインに従ってください。

  • 実行可能ファイルを構築する場合は、-xcode=pic13-xcode=pic32 のどちらも使わない。

  • 実行可能ファイルへのリンク専用のアーカイブライブラリを構築する場合は、-xcode=pic13-xcode=pic32 のどちらも使わない。

  • 共有ライブラリを構築する場合は、 -xcode=pic13 からスタートし、GOT のサイズが 8,192 バイトを超えたら、-xcode=pic32 を使用する。

  • 共有ライブラリへのリンク用のアーカイブライブラリを構築する場合は、-xcode=pic32 のみ使用する。

デフォルト

32 ビットアーキテクチャーの場合は -xcode=abs32 です。64 ビットアーキテクチャーの場合は -xcode=abs44 です。

共有動的ライブラリを作成する場合、64 ビットアーキテクチャーでは -xcode のデフォルト値である abs44abs32 を使用できません。-xcode=pic13 または -xcode=pic32 を指定してください。SPARC の場合、-xcode=pic13 および -xcode=pic32 では、わずかですが、次の 2 つのパフォーマンス上の負担がかかります。

  • -xcode=pic13 および -xcode=pic32 のいずれかでコンパイルしたルーチンは、共有ライブラリの大域または静的変数へのアクセスに使用されるテーブル (_GLOBAL_OFFSET_TABLE_) を指し示すようレジスタを設定するために、入口で命令を数個余計に実行します。

  • 大域または静的変数へのアクセスのたびに、_GLOBAL_OFFSET_TABLE_ を使用した間接メモリー参照が 1 回余計に行われます。-xcode=pic32 でコンパイルした場合は、大域および静的変数への参照ごとに命令が 2 個増えます。

こうした負担があるとしても、-xcode=pic13 あるいは -xcode=pic32 を使用すると、ライブラリコードを共有できるため、必要となるシステムメモリーを大幅に減らすことができます。-xcode=pic13 あるいは -xcode=pic32 でコンパイルした共有ライブラリを使用するすべてのプロセスは、そのライブラリのすべてのコードを共有できます。共有ライブラリ内のコードに非 pic (すなわち、絶対) メモリー参照が 1 つでも含まれている場合、そのコードは共有不可になるため、そのライブラリを使用するプログラムを実行する場合は、その都度、コードのコピーを作成する必要があります。

.o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされたかどうかを調べるには、次のように nm コマンドを使用すると便利です。


% nm ファイル名.o | grep _GLOBAL_OFFSET_TABLE_ U _GLOBAL_OFFSET_TABLE_

位置独立コードを含む .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 は、コンパイル時に機能し、コンパイルコマンドで指定したファイルだけに対して有効になります。次にコマンド行の例を示します。


example% CC -xcrossfile -xO4 -c f1.cc f2.cc
example% CC -xcrossfile -xO4 -c f3.cc f4.cc

f1.cc ファイルと f2.cc ファイルの間、および f3.cc ファイルと f4.cc ファイルの間でクロスモジュールの最適化が行われます。f1.ccf3.cc または f1.ccf4.cc の間では最適化は行われません。

A.2.117.1 値

n には次の値のいずれかを指定します。

表 A–30 -xcrossfile の値

意味

0

複数のソースファイルに渡る最適化とインライン化を実行しません。

1

複数のソースファイルに渡る最適化とインライン化を実行します。

通常、コンパイラの解析の範囲は、コマンド行で指定した個々のファイルごとに行われます。たとえば、-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 のフラグ

意味

stabs

-xdebugformat=stabs は、stab 標準形式を使用してデバッグ情報を生成します。

dwarf

-xdebugformat=dwarf は、dwarf 標準形式を使用してデバッグ情報を生成します。

-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 の値

意味

[no%]defs

すべての定義済みマクロを出力します [しません]。

[no%]undefs

すべての解除済みマクロを出力します [しません]。

[no%]use

使用されているマクロの情報を出力します [しません]。

[no%]loc

defsundefsuse の位置 (パス名と行番号) を印刷します [しません]。

[no%]conds

条件付き指令で使用したマクロの使用情報を出力します [しません]。

[no%]sys

システムヘッダーファイルのマクロについて、すべての定義済みマクロ、解除済みマクロ、使用情報を出力します [しません]。

%all

オプションを-xdumpmacros=defs,undefs,use,loc,conds,sys に設定します。この引数は、[no%] 形式の引数と併用すると効果的です。たとえば -xdumpmacros=%all,no%sys は、出力からシステムヘッダーマクロを除外しますが、そのほかのマクロに関する情報は依然として出力します。

%none

あらゆるマクロ情報を出力しません。

オプションの値は追加されていきます。-xdumpmacros=sys -xdumpmacros=undefs を指定した場合と、-xdumpmacros=undefs,sys を指定した場合の効果は同じです。


注 –

サブオプション loccondssys は、オプション defsundefsuse の修飾子です。loccondssys は、単独では効果はありません。たとえば -xdumpmacros=loc,conds,sys は、まったく効果を持ちません。


デフォルト

引数を付けないで -xdumpmacros を指定した場合、-xdumpmacros=defs,undefs,sys を指定したことになります。-xdumpmacros を指定しなかった場合、デフォルト値として -xdumpmacros=%none が使用されます。

-xdumpmacros=use,no%loc オプションを使用すると、使用した各マクロの名前が一度だけ出力されます。より詳しい情報が必要であれば、-xdumpmacros=use,loc オプションを使用します。マクロを使用するたびに、そのマクロの名前と位置が印刷されます。

次はファイル t.c の例です。


example% cat t.c
#ifdef FOO
#undef FOO
#define COMPUTE(a, b) a+b
#else
#define COMPUTE(a,b) a-b
#endif
int n = COMPUTE(5,2);
int j = COMPUTE(7,1);
#if COMPUTE(8,3) + NN + MM
int k = 0;
#endif

次の例は、defsundefssys、および loc の引数に基づいた、ファイル t.c の出力を示しています。


example% CC -c -xdumpmacros -DFOO t.c
#define __SunOS_5_9 1
#define __SUNPRO_CC 0x590
#define unix 1
#define sun 1
#define sparc 1
#define __sparc 1
#define __unix 1
#define __sun 1
#define __BUILTIN_VA_ARG_INCR 1
#define __SVR4 1
#define __SUNPRO_CC_COMPAT 5
#define __SUN_PREFETCH 1
#define FOO 1
#undef FOO
#define COMPUTE(a, b) a + b

example% CC -c -xdumpmacros=defs,undefs,loc -DFOO -UBAR t.c
command line: #define __SunOS_5_9 1
command line: #define __SUNPRO_CC 0x590
command line: #define unix 1
command line: #define sun 1
command line: #define sparc 1
command line: #define __sparc 1
command line: #define __unix 1
command line: #define __sun 1
command line: #define __BUILTIN_VA_ARG_INCR 1
command line: #define __SVR4 1
command line: #define __SUNPRO_CC_COMPAT 5
command line: #define __SUN_PREFETCH 1
command line: #define FOO 1
command line: #undef BAR
t.c, line 2: #undef FOO
t.c, line 3: #define COMPUTE(a, b) a + b

次の例では、useloc、および conds の引数によって、マクロ動作がファイル t.c に出力されます。


example% CC -c -xdumpmacros=use t.c
used macro COMPUTE

example% CC -c -xdumpmacros=use,loc t.c
t.c, line 7: used macro COMPUTE
t.c, line 8: used macro COMPUTE

example% CC -c -xdumpmacros=use,conds t.c
used macro FOO
used macro COMPUTE
used macro NN
used macro MM

example% CC -c -xdumpmacros=use,conds,loc t.c
t.c, line 1: used macro FOO
t.c, line 7: used macro COMPUTE
t.c, line 8: used macro COMPUTE
t.c, line 9: used macro COMPUTE
t.c, line 9: used macro NN
t.c, line 9: used macro MM

次は、ファイル y.c の例です。


example% cat y.c
#define X 1
#define Y X
#define Z Y
int a = Z;

次は、y.c 内のマクロに基づいた -xdumpmacros=use,loc の出力です。


example% CC -c -xdumpmacros=use,loc y.c
y.c, line 4: used macro Z
y.c, line 4: used macro Y
y.c, line 4: used macro X

関連項目

dumpmacros プラグマと end_dumpmacros プラグマを使用すれば、-xdumpmacros のスコープを変更でき