マニュアルページ CC.1
名前
CC - C++ コンパイラ
形式
CC [-386] [-486] [-a] [-B{dynamic|static|symbolic}] [-c]
[-cg{89|92}] [-compat[={4|5}]] [+d] [-Dname[=def]]
[-d{y|n}] [-dalign] [-dryrun] [-E] [+e{0|1}]
[-erroff[=t[,t...]]] [-errtags[=a]]
[-errwarn[=t[,t...]]] [-fast] [-features=a[,a...]]
[-filt[=filter[,filter...]] [-flags] [-fnonstd]
[-fns[={yes|no}]] [-fprecision=a] [-fround=a]
[-fsimple[=n]] [-fstore] [-ftrap=a[,a...]] [-G] [-g]
[-g0] [-H] [-h[ ]lname] [-help] [-Ipathname] [-I-] [-i]
[-inline] [-instances=i] [-instlib=file] [-KPIC]
[-Kpic] [-keeptmp] [-Lpath] [-llib] [-libmieee]
[-libmil] [-library=lib[,lib...]] [-mc] [-migration]
[-misalign] [-mr[,string]] [-mt] [-native] [-noex]
[-nofstore] [-nolib] [-nolibmil] [-noqueue]
[-norunpath] [-O[n]] [-O[level]] [-o file] [+p] [-P]
[-p] [-pentium] [-pg] [-PIC] [-pic] [-pta] [-ptipath]
[-pto] [-ptrpath] [-ptv]
[{-Qoption|-qoption}phase[,option...]]
[{-Qproduce|-qproduce}type] [-qp] [-Rpath[:path...]]
[-readme] [-S] [-s] [-sb] [-sbfast]
[-staticlib=l[,l...]] [-sync_stdio=[yes|no]]
[-temp=path] [-template=a[,a...]] [-time] [-Uname]
[-unroll=n] [-V] [-v] [-vdelx] [-verbose=a[,a...]]
[+w] [+w2] [-w] [-Xm] [-xa] [-xalias_level[=n]] [-xar]
[-xarch=isa] [-xautopar] [-xbuiltin[={%all|%none}]]
[-xcache=c] [-xcg{89|92}] [-xchar[=o]] [-xcheck[=n]]
[-xchip=c] [-xcode=v] [-xcrossfile[=n]]
[-xdepend[={yes|no}]] [-xdumpmacros[=value[,value...]]
[-xe] [-xF] [-xhelp={flags|readme}] [-xia]
[-xild{off|on}] [-xinline[=func_spec[,func_spec...]]
[-xipo[={0|1|2}] [-xjobs=n]
[-xlang=language[,language]] [-xldscope={v}]
[-xlibmieee] [-xlibmil] [-xlibmopt] [-xlic_lib=sunperf]
[-xlicinfo] [-xlinkopt[=level]] [-xM] [-xM1] [-xMerge]
[-xmaxopt[=v]] [-xmemalign=ab] [-xnativeconnect[=n]]
[-xnolib] [-xnolibmil] [-xnolibmopt] [-xOn] [-xopenmp]
[-xpagesize=n] [-xpagesize_heap=n] [-xpagesize_stack=n]
[-xpch=v] [-xpchstop] [-xpg] [-xport64[=v]]
[-xprefetch[=a[,a]] [-xprefetch_auto_type=[a]
[-xprefetch_level[=l]] [-xprofile=p]
[-xprofile_ircache[=path]]
[-xprofile_pathmap=collect_prefix:use_prefix]
[-xregs=r[,r...]] [-xrestrict[=f]] [-xs] [-xsafe=mem]
[-xsb] [-xsbfast] [-xspace] [-xtarget=t]
[-xthreadvar[=f2o]] [-xtime] [-xtrigraphs[={yes|no}]]
[-xunroll=n] [-xustr={ascii_utf16_ushort|no}]
[-xvector[={yes|no}]] [-xvis] [-xwe] [-Yc,path]
[-z arg] [file] ...
Sun Studio 9 C++ 5.6 コンパイラ
マニュアルページは、クイックリファレンスです。C++ コンパイラ
とそのオプションの詳細情報については、『C++ ユーザーズガイ
ド』を参照してください。
プラットフォーム、環境、新機能、およびソフトウェアの修正の最
新情報については、以下のコマンドを実行して表示されるオンライ
ン Readme ファイルを参照してください。
CC -xhelp=readme
Readme ファイル、ユーザーズガイド、リファレンスマニュアルを
含むすべてのインストール済み Sun コンパイラおよびツールのマ
ニュアルには、HTML ブラウザで以下の URL を指定してアクセスで
きます。
file:/opt/SUNWspro/docs/index.html
注 - Sun コンパイラおよびツールが、デフォルトの
/opt 以外のディレクトリにインストールされている場合は、シス
テム管理者に実際のパスをお尋ねください。
注 - このドキュメントの中で、"IA" および "x86" という用語は
Pentium、Pentium Pro、Pentium II、Pentium II Xeon、Celeron、
Pentium III、および Pentium III Xeon プロセッサのような
Intel 32 ビットプロセッサアーキテクチャと、AMD と Cyrix に
よって製造される互換マイクロプロセッサチップを指します。
機能説明
新しいオプション、フラグ、およびデフォルト
このリリースの C++ コンパイラには、次の新機能が追加されてい
ます。
o -xarch、-xcode、-xmemalign、および -xprefetch オプションの
デフォルトを変更し、-fast および -O オプションの展開を変更す
ることによるパフォーマンスの向上
o x86 アーキテクチャ向けの -xarch、-xtarget、および -xchip
のフラグを追加
o -xchip および -xtarget のフラグ追加による SPARC のサポート
拡張
o -xautopar、-xvector、および -xdepend によるループの最適化
o -xpch でのプリコンパイル済みヘッダーファイルの自動生成によ
るコンパイル時パフォーマンスの向上
o extern inline 関数のデフォルトのサポート
o -xrestrict オプションでの制限付きポインタの認識
o #pragma opt 指令および -xmaxopt オプションによる変換単位内
での最適化レベルの制御
o -xustr オプションによる UTF-16 ワイド文字のサポート強化
C++ コンパイラが、Intel 版で -xarch、-xtarget、および -xchip
用の新しいフラグをサポートするようになりました。これらの新し
いフラグは、x86 プラットフォーム上での Solaris ソフトウェア
による SSE および SSE2 命令のサポートとの組み合わせで Pen-
tium 3 および Pentium 4 チップを活用することを意図していま
す。新しいオプションは次のとおりです。
-xchip=pentium3: Pentium 3 方式のプロセッサ用に最適化し
ます。
-xchip=pentium4: Pentium 4 方式のプロセッサ用に最適化し
ます。
-xtarget=pentium3: -xarch=sse、-xchip=pentium3、
-xcache=16/32/4:256/32/4 に設定します。
-xtarget=pentium4: -xarch=sse2、-xchip=pentium4、
-xcache=8/64/4:256/128/8 に設定します。
-xarch=sse: SSE 命令セットをpentium_pro ISA に追加しま
す。
-xarch=sse2: SSE が認める命令セットに SSE2 命令セットを
追加します。
注意:
Solaris x86 SSE/SSE2 Pentium 4 互換プラットフォームで動
作するよう -xarch={sse|sse2} を付けてコンパイルしたプロ
グラムは、SSE/SSE2 対応のプラットフォームでのみ実行する
必要があります。SSE/SSE2 に対応していないプラットフォー
ムでそうしたプログラムを実行すると、セグメント例外が発
生したり、明示的な警告メッセージなしに不正な結果が発生
したりすることがあります。
SSE/SSE2 でコンパイルされたバイナリが SSE/SSE2 に対応し
ていないプラットフォームで実行されることのないようにす
るための OS およびコンパイラに対するパッチが、後日提供
されるかもしれません。
Pentium 4 互換プラットフォームの場合、Solaris 9 update
6 以降の OS リリースが SSE/SSE2 に対応しています。これ
より前のバージョンの Solaris OS は SSE/SSE2 に対応して
いません。このことは、.il インラインアセンブリ言語関数
を使用しているプログラムや、SSE/SSE2 命令を利用している
__asm() アセンブラコードにも当てはまります。
コンパイルとリンクを別々に行う場合は、必ずコンパイラを
使ってリンクし、 -xarch={sse|sse2} で適切な起動ルーチン
がリンクされるようにしてください。
実際のニーズに合った適切な -xchip、-xtarget、および -xarch
オプションの組み合わせを決定するにあたっては、次の指針に従っ
てください。
* Solaris 9 update 6 か、それ以前の Solaris を実行する Pen-
tium 3 または Pentium 4 で構築を行い、-fast、-xarch=native、
または -xtarget=native を指定するかどうか。
この場合、コンパイラは次のように展開します。
o Solaris 9 update 5 またはそれ以前の Solaris オペレー
ティングシステムは、SSE および SSE2 命令をサポートしな
いため、-xarch は pentium_pro に設定されます (pentium3
あるいは pentium4 ではありません)。
注: これらのバージョンの Solaris ソフトウェアを使用して
いるかどうかに関係なく、-xarch=sse あるいは -xarch=sse2
を指定することができますが、Solaris 9 update 6 以降が
SSE および SSE2 命令をサポートしているため、構築で生成
された実行可能ファイルは、そうしたバージョンの Solaris
ソフトウェアを実行するマシンで実行する必要があります。
o -xchip は、適宜 pentium3 または pentium4 に設定されま
す。
o -xcache は、Pentium 3 プロセッサの場合
16/32/4:256/32/4、Pentium 4 プロセッサの場合
8/64/4:256/128/8 に設定されます。
* Solaris 9 update 6 以降の Solaris を実行する Pentium 3 ま
たは Pentium 4 マシンで構築を行い、-fast、-xarch=native、ま
たは -xtarget=native を指定するかどうか。
この場合、コンパイラは次のように展開します。
o -xarch は、Pentium 3 の場合 sse、Pentium 4 の場合
sse2 に設定されます。
o -xchip は、適宜 pentium3 または pentium4 に設定されま
す。
o -xcache は、Pentium 3 プロセッサの場合
16/32/4:256/32/4、Pentium 4 プロセッサの場合
8/64/4:256/128/8 に設定されます。
詳細は、このマニュアルページの個々のオプションの説明を参照し
てください。
C++ コンパイラの概要
CC は、C++ とアセンブラのソースファイルをオブジェクトファイ
ルに変換し、生成されたオブジェクトファイルとライブラリを実行
可能プログラムにリンクします。
C++ オブジェクトを含むプログラムは必ず、CC でリンクする必要
があります。
CC は、.c、.C、.cc、引数を C++ ソースプログラムとして受け付
けます。見なされます。
上記の接尾辞を持たないファイルはオブジェクトプログラムまたは
ライブラリと見なされ、リンカーに渡されます。 -c、 -S、 -E、
-P のいずれかが指定されていないかぎり、これらのプログラムお
よびライブラリは、指定された任意のコンパイルまたはアセンブル
の結果とともに指定された順序でリンクされ、 a.out という名前
の実行ファイルが生成されます。実行ファイルの名前は -o オプ
ションを使用して指定できます。
1 つのファイルのコンパイルとリンクをすべて一度に行うときに
は、中間ファイルは削除されます。
インクリメンタルリンクを行う場合は、ld の代わりに ild が使用
されることがあります。詳細は、-xildon および -xildoff の項を
参照してください。
CC コマンドを使用する前に、C++ コンパイルシステムのインス
トール場所として選んだディレクトリの名前を検索パスに追加して
ください。検索パスの設定方法については csh(1) または sh(1)
マニュアルページを参照してください。
64 ビットのコンパイル
このバージョンのコンパイラは、32 ビットまたは 64 ビットどち
らの Solaris SPARC プラットフォーム版でも、64 ビットオブジェ
クトバイナリを生成できます。生成された実行可能ファイルは、64
ビットカーネルを持つ Solaris ソフトウェアが動作する 64 ビッ
トプロセッサ上でのみ動作します。
いくつかの形式の -xarch=v9 オプションを使って、64 ビット
Solaris 向けのコンパイルができます。 -xtarget または -fast
を指定した場合でも、これらのオプションのいずれか 1 つを指定
する必要があります。その場合、-xarch=v9 オプションは、-xtar-
get またはその他、-xarch を設定するオプションの後に指定する
必要があります。たとえば、次のように指定します。
-xtarget=ultra -xarch=v9
64 ビットの Solaris ソフトウェア上で -xarch=v9 を付けて共有
動的ライブラリを構築する場合、デフォルトの -xcode=abs44 は機
能しないため、-xcode= を指定する必要があります。-xcode=pic13
か -xcode=pic32 のいずれかを使ってください。
コードのアドレス形式の指定については、新しいオプション
-xcode=abs32|abs44|abs64|pic13|pic32 も参照してください。
64 ビット Solaris ソフトウェアでは、64 ビット整数およびポイ
ンタデータが使用できるようになるばかりでなく、大きなファイル
のサポートも使用できるようになります。
64 ビット Solaris ソフトウェアに関する開発者向けの情報につい
ては、http://docs.sun.com にある『Solaris 64 ビット開発ガイ
ド』を参照してください。
オプション
マクロオプション (他のオプションを含むオプション) を選択的に
無効にするため、コンパイラオプションは一般に、左から右にかけ
て処理されます (例外として、 -U オプションはすべての -D オプ
ションの後に処理されます)。この規則は、リンカーオプションに
は当てはまりません。
C++ コンパイラオプションについての詳細な説明は、『C++ ユー
ザーズガイド』を参照してください。
CC は次のオプションを受け付けます。
-386 (IA プラットッフォーム) -xtarget=386 を使用しま
す。
-486 (IA プラットッフォーム) -xtarget=486 を使用しま
す。
-a -xa を使用します
tcov(1) のマニュアルページも参照してください。
-Bbinding ライブラリのリンク方法を指定します。リンクをシンボ
リック、動的 (共有、-Bdynamic) または静的 (非共
有、-Bstatic) のいずれで行うかを指定します。
デフォルトでは動的リンクが行われます。このオプショ
ンはコマンド行の中で繰り返し指定できます。
-Bbinding についての詳細は、 ld(1) のマニュアル
ページおよび Solaris のマニュアルを参照してくださ
い。
-Bdynamic このオプションを指定すると、 liblib.so
ファイルを検索するようにリンカーに指示します。リン
クのライブラリ束縛を共有にしたい場合は、 -Bdynamic
オプションを指定します。 liblib.so ファイルが見つ
からないと、 liblib.a ファイルを検索します。
libC を静的にリンクしたい場合は、 -staticlib=libC
オプションを使用してください。
-Bstatic このオプションを指定すると、リンカーは
liblib.a ファイルだけを検索します。接尾辞 .a は、
ファイルが静的、つまり非共有であることを示します。
リンクのライブラリ束縛を非共有にしたい場合は、この
オプションを指定します。
-Bsymbolic は、シンボルが他で定義済みであっても、
可能であれば共用ライブラリ内でシンボルを解決しま
す。-Bsymbolic の説明については、ld(1) のマニュア
ルページを参照してください。
このオプションと引数は ld リンカーに渡されます。コ
ンパイルとリンクを別々の工程で行ない、 -Bbinding
オプションを使用する場合は、リンク工程で -Bbinding
オプションを指定しなければなりません。
警告:
C++ コードを含むプログラムには -Bsymbolic を使用し
ないで、代わりにリンカーマップファイルを使用してく
ださい。
-Bsymbolic を使用すると、異なるモジュール内の参照
を、1 つの広域オブジェクトとみなされるターゲットの
別のコピーにバインドできます。
例外メカニズムは、アドレス比較に依存します。何らか
のコピーが 2 つある場合、そのアドレスが同一でない
と、例外メカニズムは一意とみなされるアドレスの比較
に依存するため、例外メカニズムが失敗することがあり
ます。
別々のステップでコンパイルおよびリンクし、-Bbind-
ing オプションを使用する場合、このオプションはリン
クステップに置く必要があります。
-c ld(1) によるリンクを抑止し、ソースファイルごとに
.o ファイルを作成します。ファイルを 1 つだけコンパ
イルする場合は、 -o オプションによってオジェクト
ファイルの名前を指定できます。以下に例を示します。
o 以下のように入力すると、オブジェクトファイル
x.o が生成されます。
% CC -c x.cc
o 以下のように入力すると、オブジェクトファイル
y.o が生成されます。
% CC -c x.cc -o y.o
警告:
コンパイラは、入力ファイル (たとえば、.cc、.c、お
よび .i) のオブジェクトコードを生成するときに、常
に作業用ディレクトリに .o ファイルを作成します。リ
ンク工程を抑止する場合には、 .o ファイルは削除され
ません。
関連項目:
-o filename
-cg{89|92}
-xcg{89|92} を使用します。
-xtarget=native も参照してください。
-compat[={4|5}]
コンパイラの主要なリリースの互換モードを設定しま
す。このオプションにより、プリプロセッサ記号の
__cplusplus と __SUNPRO_CC_COMPAT が制御されます。
C++ コンパイラには 2 つの主要モードがあります。互
換モードは、4.2 コンパイラ (-compat[=4]) で定義さ
れる Annotated C++ Reference Manual (ARM) 意味論と
言語を受け付けます。標準モードは、ANSI/ISO 標準
-compat=5) に準拠した言語構造を受け付けます。
ANSI/ISO 標準と C++ 4.0.1、4.1、4.2 の間には、名前
の符号化、vtable の位置、ABI の細部について多数の
相違点があるため、これら 2 つのモードはお互いに互
換性がありません。2 つのモードは、次の表に示すよう
に、 -compat オプションで区別します。
値 意味
-compat[=4] (互換モード) 言語およびバイナリ互換
を 4.0.1、4.1、および 4.2 のコンパ
イラに設定します。 __cplusplus プリ
プロセッサマクロを 1 に
__SUNPRO_CC_COMPAT プリプロセッサマ
クロを 4 に設定します。
-compat=5 (標準モード) 言語およびバイナリ互換
を ANSI/ISO 標準モードに設定しま
す。(__cplusplus プリプロセッサマク
ロを 199711Lに __SUNPRO_CC_COMPAT
プリプロセッサマクロを 5 に設定する
)。
デフォルト:
-compat オプションを指定しない場合は、 -compat=5
が設定されます。 -compat だけを指定すると、 -com-
pat=4 が設定されます。
相互の関連性:
互換モード (-compat[=4]) で標準ライブラリを使用す
ることはできません。
-compat[=4] と以下のオプションは併用できません。
o -Bsymbolic
o -features=[no%]strictdestorder
o -features=[no%]tmplife
o -library=[no%]iostream
o -library=[no%]Cstd
o -library=[no%]Crun
o -library=[no%]rwtools7_std
o -xarch=v9
o -xarch=v9a
o -xarch=v9b
-compat=5 と以下のオプションは併用できません。
o -Bsymbolic
o +e
o -features=[no%]arraynew
o -features=[no%]explicit
o -features=[no%]namespace
o -features=[no%]rtti
o -library=[no%]complex
o -library=[no%]libC
o -vdelx
警告:
共有ライブラリの構築では、-Bsymbolic を使わないで
ください。
+d コンパイラによる C++ インライン関数の展開を抑止し
ます。
C++ 言語の規則では、C++ インライン関数とは以下の文
のどれかが当てはまる関数です。
o 関数はインラインキーワードを使用して定義されま
す。
o 関数はクラス定義の中で定義されます (宣言ではあり
ません)。
o 関数は、コンパイラが生成したクラスメンバー関数で
す。
C++ 言語の規則では、実際にインライン関数の呼び出し
をインライン化するかどうかコンパイラが選択できま
す。以下を除いて、C++ コンパイラはインライン関数の
呼び出しをインライン化します。
o 関数が複雑すぎます。
o +d オプションが選択されています。
o -g オプションが選択されています。
相互の関連性:
このオプションは、デバッグオプション -g を指定すれ
ば、自動的に有効になります。
-g0 オプションを指定すると +d は有効になりません。
+d オプションは -x04 または -x05 を使用した場合に
実行される自動インライン化には影響しません。
-Dname[=def]
マクロシンボル name を def と定義します。これは、
ソースファイルの先頭に #define 指令を指定するのと
同義です。 -D オプションは、コマンド行で複数回指定
することができます。
次の値が事前に定義されています。
SPARC および IA プラットフォーム:
__BUILTIN_VA_ARG_INCR
__cplusplus
__DATE__
__FILE__
__LINE__
__STDC__
__SVR4
__SUNPRO_CC = 0x560
__SUNPRO_CC_COMPAT = 4 または 5
__sun
sun
__TIME__
__`uname -s`_`uname -r` (無効な文字列は下線に置き
換えられます。例: -D__SunOS_5_7, -D__SunOS_5_8)
__unix
unix
_WCHAR_T
__ARRAYNEW「配列」形式の operator new と operator
delete が有効な場合 (「-features=[no%]arraynew」を
参照)
_BOOL bool 型が有効な場合 (「-features=[no%]bool」
を参照)
(SPARC のみ)
__sparc
sparc
(SPARC V9 のみ)
__sparcv9 (64 ビット用のコンパイルのみ)
(IA プラットフォームのみ)
__i386
i386
デフォルト:
[=def] を使用しない場合は、 name は 1 として定義さ
れます。
相互の関連性:
+p を使用すると、 sun、 unix、 sparc、 i386 は定義
されません。
-d{y|n} 実行可能ファイルすべてに対する動的ライブラリの使用
を許可 [禁止] します。
-dy では、リンカーは動的リンクを行います。これはデ
フォルトです。
-dn では、リンカーは静的リンクを行います。
このオプションと引数は、 ld に渡されます。
相互の関連性:
64 ビット環境では、システムライブラリの多くは動的
共用ライブラリとして有効です。これには、 libm.so、
および libc.so が含まれ、 libm.a および libc.a は
提供されません。結果として、 -Bstatic および -dn
により 64 ビット Solaris オペレーティング環境でリ
ンクエラーが発生します。このような場合、アプリケー
ションは動的ライブラリとリンクする必要があります。
-dalign (SPARC) -dalign は -xmemalign=8s と同じです。詳細
については -xmemalign をご覧ください。
-dryrun コンパイラによって生成されたコマンドの表示のみを行
い、実際の実行は行わないように CC に指示します。
-E CC ドライバに、C++ ソースファイルに対して前処理の
みを行い、結果を標準出力に送るように指示します。コ
ンパイルは行われず .o ファイルも生成されません。
このオプションを使用すると、プリプロセッサの行番号
付け情報も出力に含まれます
テンプレートが使用されている場合は、このオプション
による出力を C++ コンパイラへの入力として使用する
ことはできません。
+e{0|1} 互換モード (-compat[=4]) では仮想関数のクラスに対
する仮想テーブルの生成を制御します。標準モード (デ
フォルトモード) では無効であり無視されます。
値:
o +e0 仮想テーブルの生成を抑止し、必要とされている
テーブルへの外部参照を生成します。
o +e1 仮想関数が定義されたすべてのクラスに対して仮
想テーブルを生成します。
相互の関連性:
このオプションでコンパイルする場合は、
-features=no%except も使用してください。それ以外
は、コンパイラは例外処理で使用される内部型用に仮
想テーブルを生成します。
テンプレートクラスに仮想関数がある場合、コンパイ
ラがすべての必要な仮想テーブルを生成するが、テー
ブルが重複しないことを確認できない可能性がありま
す。
-erroff[=t[,t...] ]
CC 警告メッセージを抑止します。エラーメッセージに
は影響しません。
値:
-erroff の値は、以下のいずれか 1 つまたは複数を含
むコンマで区切ったリストのメンバーです。
tag この tag で指定された警告メッセージを抑止
します。 -errtags=yes オプションを使用す
れば、メッセージのタグを表示できます。
no%tag この tag で指定された警告メッセージを有効
にします。
%all すべての警告メッセージを抑止します。
%none すべての警告メッセージを有効にします。こ
れはデフォルトです。
指定の順序は重要です。たとえば、 %all,no%tag は
tag を除くすべての警告メッセージを抑止します。
デフォルト:
デフォルトは -erroff=%none です。 -erroff を指定す
ることは、 -erroff=%all を指定することと同じです。
警告:
-erroff オプションで抑止できるのは、 -errtags オプ
ションが使用されたときにタグが表示される、C++ コン
パイラのフロントエンドからの警告メッセージだけで
す。
-errtags [ = a]
-erroff オプションで抑止できる、あるいは -errwarn
オプションで重大なエラーとすることのできる、C++ コ
ンパイラのフロントエンドからの警告メッセージすべて
のメッセージタグを表示します。C++ コンパイラドライ
バや、C++ コンパイルシステムのその他のコンポーネン
トからのメッセージにはエラータグがなく、 -erroff
で抑止したり、 -errwarn で重大なエラーにすることは
できません。
値とデフォルト:
a は「yes」か「no」です。デフォルトは -errtags=no
です。 -errtags を指定することは -errtags=yes を指
定することと同じです。
-errwarn [ = t[,t...]]
このオプションを使用すると、指定した警告メッセージ
が発生した場合に、C++ コンパイラがエラーステータス
で終了します。
値:
t は tag、no%tag、%all, %none のいずれか 1 つ、ま
たは複数を含むコンマで区切ったリストです。指定の順
序は重要です。たとえば %all,no%tag と指定した場
合、このタグ以外のなんらかの警告が発せられると、C
コンパイラは重大エラーのステータスで終了します。
以下は -errwarn の値についての詳しい説明です。
tag tag で指定されたメッセージが発行される
と、 cc は重大エラーのステータスで終了し
ます。tag が出力されない場合には影響はあ
りません。
no%tag tag で指定されたメッセージが警告メッセー
ジとしてだけ出色された場合に、 cc が重大
エラーのステータスで終了するのを回避しま
す。tag が出色されない場合には影響はあり
ません。以前、このオプションにtag または
%all を付けて行なった、該当のメッセージが
警告メッセージとして出力された場合に cc
が重大エラーのステータスで終了するという
指定を元に戻すには、このオプションを使用
します。
%all なんらかの警告メッセージが発せられた場合
に、 cc が重大エラーのステータスで終了し
ます。%all に続けて no%tag を指定すると、
特定の警告メッセージについてこの処理を回
避させることができます。
%none どのような警告タグが出力されたとしても、
そのメッセージが原因で cc が重大エラーで
終了するのを回避します。
デフォルト:
デフォルトは -errwarn=%none です。-errwarn とだけ
指定した場合には、-errwarn=%all と同じ意味になりま
す。
警告:
C コンパイラから出される警告メッセージは、リリース
によって異なります。これはコンパイラのエラーチェッ
クの向上や、機能追加によるものです。 -errwarn=%all
を使用してコンパイルした結果、エラーが発生しなかっ
たものが、次のリリースのコンパイラではエラーが発生
してしまう場合もあります。
-errtags オプションの指定時にタグが表示される、C
コンパイラフロントエンドからの警告メッセージについ
てのみ、 -errwarn の指定によって C コンパイラをエ
ラーステータスで終了させることができます。
関連項目:
-erroff、-errtags
-fast このオプションは、最高の実行時性能が得られるように
実行可能ファイルをチューニングするための最初の手段
として効果的に利用できるマクロです。-fast の展開内
容はコンパイラのリリースのたびに変更される可能性が
あり、ターゲットのプラットフォーム固有のオプション
に展開されます。実行可能ファイルのチューニング過程
で、-# または -dryrun オプションを使って-fast の展
開内容を確認し、-fast の適切なオプションを反映させ
ることを推奨します。
-fast オプションの展開内容に -xlibmopt オプション
が新しく含まれるようになっています。このオプション
は、コンパイラが最適化された数学ルーチンを使用する
ことを可能にします。詳細は、このマニュアルページの
-xlibmopt の説明を参照してください。このオプション
を指定すると、以下のオプションが展開され、ほとんど
のアプリケーションで最高に近いパフォーマンスが得ら
れます。
o -fns (SPARC、IA)
o -fsimple (SPARC のみ)
o -ftrap=%none (SPARC、IA)
o -nofstore (IA のみ)
-xlibmil (SPARC, IA)
-xlibmopt (SPARC, IA)
-xmemalign (SPARC のみ)
o -xO5 (SPARC、IA)
o -xtarget=native (SPARC、IA)
o -xbuiltin=%all (SPARC, IA)
相互の関連性:
コード生成オプション、最適化レベル、組み込み関数の
最適化、インラインテンプレートファイルの使用を指定
しても、その後で指定したフラグの方が優先されます。
たとえば、-fast だけを使用した場合、最適化レベルは
-xO5 となりますが、-fast , -xO3 と指定すると-xO3
の最適化レベルが使用されます。すでに設定されている
最適化レベルは、新たに指定した最適化レベルに置き換
えられます。
-fast マクロはコンパイルオプションまで展開します
が、これは指定された他のオプションに影響を及ぼすこ
とがあります。たとえば次のコマンドで、-fast マクロ
の展開は -xtarget=native を含み、これは 32 ビット
アーキテクチャオプションの 1 つに -xarch を復帰さ
せます。
無効:
example% CC -xarch=v9 -fast test.cc
有効:
example% CC -fast -xarch=v9 test.cc
相互の関連性については、各オプションの説明を参照し
てください。
警告:
-fast オプションでコンパイルした場合、そのコードに
は移植性がありません。たとえば、UltraSPARC-III シ
ステム上で次のコマンドを使用してコードをコンパイル
した場合、生成されるバイナリは UltraSPARC-II シス
テム上では実行できません。
example% CC -fast test.cc
IEEE 標準浮動小数点例外処理に依存するプログラムで
は、このオプションを使用しないでください。異なる数
値結果になったり、プログラムが処理の途中で終了した
り、予期しない SIGFPE シグナルが発生する可能性があ
ります。
-fast オプションには、 -fns -ftrap=%none が含まれ
ています。つまり、すべてのトラップをオフにします。
以前の SPARC リリースでは、-fast マクロに -fnonstd
が含まれていましたが、現在は含まれていません。
以前の SPARC リリースでは、 -fast マクロは -fsim-
ple=1 に展開されていました。現在は -fsimple=2 に展
開されます。
以前の SPARC リリースでは、 -fast マクロは -xO4 に
展開されていました。現在は -xO5 に展開されます。
『数値計算ガイド』、 ieee_sun(3M) も参照してくださ
い。
-features=a
C++ 言語の機能の一部を有効または無効にします。
別途指定がある場合を除き、以下のフラグは標準モード
(デフォルト) と互換モード (-compat[=4]) の両方で有
効です。
値 意味
%all 所定のモード (互換モードか標準モー
ド) で有効なすべての -feature オプ
ション。
%none 所定のモード (互換モードか標準モー
ド) でオフに切り替えることができる
すべての機能をオフに切り替えます。
[no%]altspell トークンの代わりのスペルを認識しま
す [認識しません] (例、 && の代わり
に and)。デフォルトは、互換モードで
no%altspell、標準モードで altspell
です。
[no%]anachronisms
旧形式の構文を許可 [禁止] します。
無効な場合
(-feature=no%anachronisms)、旧形式
の構文は許可されません。デフォルト
は anachronisms です。
[no%]arraynew (互換モードのみ) operator new と
operator delete の配列形式を認識し
ます [認識しません] (例、 operator
new[] (void*) )。有効にすると、マク
ロ __ARRAYNEW = 1 が定義されます。
有効にしない場合は、マクロは定義さ
れません。デフォルトは no%arraynew
です。このフラグを使用する方法につ
いては、『C++ 移行ガイド』を参照し
てください。
[no%]bool bool 型とリテラルを許可 [禁止] しま
す。有効にする場合は、マクロ _BOOL
= 1 が定義されます。有効にしない場
合は、マクロは定義されません。デ
フォルトは、互換モードで no%bool、
標準モードで bool です。
[no%]conststrings
読み取り専用メモリー中にリテラル文
字列を置きます [置きません]。デフォ
ルトは、互換モードで
no%conststrings、標準モードで
conststrings です。
[no%]except C++ 例外を許可 [禁止] します。C++
例外が無効 (-features=no%except) の
とき、関数の throw 指定が受け付けら
れますが、無視されます。コンパイラ
は例外コードを生成しません。try、
throw、および catch キーワードは常
に保持されます。デフォルトは except
です。
[no%]explicit (互換モードのみ) キーワード expli-
cit を認識します [認識しません]。デ
フォルトは、no%explicit です。
[no%]export キーワード export を認識します [認
識しません]。デフォルトは互換モード
で no%export、標準モードで export
です。
[no%]extensions
その他の C++ コンパイラで一般的に受
け付けられる非標準コードを許可 [禁
止] します。-features=extensions オ
プションを使用する際にコンパイラが
受け付ける無効なコードに関する説明
は、C++ ユーザーズガイドの第 4 章を
参照してください。デフォルトは
-features=no%extentions です。
[no%]iddollar $ を非初期識別文字として許可 [禁止]
します。デフォルトは no%iddollar
です。
[no%]localfor for 文に対して、新しい「局所的ス
コープの規則」を適用します [適用し
ません]。デフォルトは互換モードで
no%localfor、標準モードで localfor
です。
[no%]mutable キーワード mutable を認識します [認
識しません]。デフォルトは、互換モー
ドで no%mutable、標準モードで mut-
able です。
[no%]namespace (互換モードのみ) キーワード
namespace と using を認識します [認
識しません]。デフォルトは
no%namespace です。
-features=namespace の目的は、コー
ドの標準モードへの変換をサポートす
ることです。これらのキーワードを識
別子として使用している場合、このオ
プションを有効にするとエラーメッ
セージが出力されます。このキーワー
ド認識オプションを使用すると、標準
モードでコンパイルすることなく、追
加キーワードの使用を検出できます。
[no%]rtti (互換モードのみ) 実行時の型識別
(RTTI) を許可 [禁止] します。
dynamic_cast<> 演算子と typeid 演算
子を使用するには、RTTI を有効にしな
ければなりません。デフォルトは
no%rtti です。
[no%]split_init
ローカルでない静的オブジェクトの初
期設定子を各関数に設定します [しま
せん]。 -features=no%split_init を
使用する場合、コンパイラによりすべ
ての初期設定子が一つの関数に設定さ
れます。-features=no%split_init を
使用すると、可能なコンパイル時間で
コードの大きさを最小化します。デ
フォルトは split_init です。
[no%]strictdestorder
(標準モードのみ) 静的な記憶期間を持
つオブジェクトを破壊する順番につい
て、C++ 標準に従います [従いません
]。デフォルトは strictdestrorder で
す。
[no%]tmplife (標準モードのみ) ANSI/ISO C++ 標準
規格で定義されているように、ある式
によって生成された一時オブジェクト
を、式全体が終わる時点で消去します
[しません] ( -features=no%tmplife
が指定されている場合は、ほとんどの
一時オブジェクトは、そのブロックの
最後で消去されます)。デフォルトは
tmplife です。
[no%]transitions
標準 C++ で問題となり、予期できない
動作をしたり、将来のコンパイラで動
作しない可能性のある ARM 言語構成を
許可 [禁止] します。
-features=no%transitions を使用する
場合、コンパイラはエラーメッセージ
の代わりにこれらの構成に関する警告
を出力します。互換モード (-com-
pate[=4]) で -features=transitions
を使用した場合は、 +w または -w2 が
指定された場合のみ、コンパイラはこ
れらの構成に関する警告を表示しま
す。以下の構成は移行エラーと考えら
れ、使用後にテンプレートを再定義
し、 typename がテンプレート定義に
必要な場合に省略し、型 int を暗黙に
宣言します。移行エラーの設定は将来
のリリースでは変更される可能性があ
ります。デフォルトは transitions で
す。
デフォルト:
-features を指定しない場合、互換モード (-com-
pat[=4]) では
-features=%none,anachronisms,except,split_init,transitions
が仮定されます。
-features を指定しない場合、標準モード (デフォルト
モード) には
-features=%all,no%iddollar,no%extensions,no%tmplife
が仮定されます。
相互の関連性:
このオプションは上書きされずに累積されます。
標準モード (デフォルト) で次のいずれかを使用する
と、標準ライブラリおよび標準ヘッダーとの互換性がな
くなります。
o no%bool
o no%except
o no%mutable
o no%explicit
警告:
-features=%all や -features=%none を使用するときは
注意してください。機能の組み合わせ内容そのものが、
コンパイラのリリースのたびに、またパッチのたびに変
更され、予期しない動作を起こす可能性があります。
-features=tmplife を使用すると、プログラムの動作が
変わる可能性があります。 -features=tmplife オプ
ションがプログラムの正しい動作に影響を及ぼすかどう
かを調べることは、プログラムの移植性を検査すること
にもなります。
compat (-compt=4) モードの場合、デフォルトではコン
パイラは、 -features=split_init を使用します。その
場合、-features=%none オプションを使って他の機能を
無効にするよりも、代わりに
-features=%none,split_init を使用して、初期化子の
個別関数への分割を有効にしなおした方が望ましいこと
があります。
-filt[=filter[,filter...]
通常 CC がリンカーからのエラーメッセージに対して行
う、フィルタ処理を抑止します。
filter には次のいずれかを指定します。
[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=errors,names,returns,stdlib が指定されたもの
と仮定します。
相互の関連性:
[no%]returns no%names と一緒に使用された場合は無効
です。つまり、次のオプションはすべて同じ意味を持ち
ます。
-filt=no%names
-filt=no%names,no%returns
-filt=no%names,returns
-flags -xhelp=flags と同義です。
-fnonstd
このオプションによって、浮動小数点オーバーフロー、
ゼロによる除算、無効な演算例外によるハードウェアト
ラップが可能になります。
これらのトラップは SIGFPE シグナルに変換され、プロ
グラムに SIGFPE ハンドラがない場合は、メモリーダン
プを残して終了します (コアダンプのサイズをゼロに限
定していない場合)。
SPARC: さらに、 -fnonstd は SPARC 非標準浮動小数点
を選択します。
デフォルト:
-fnonstd を指定しない場合、IEEE 754 浮動小数点演算
例外はプログラムを中断せず、アンダーフローは段階的
になります。
拡張:
IA: -fnonstd は -ftrap=common に拡張されます。
SPARC: -fnonstd は -fns -ftrap=common に拡張され
ます。
詳細については、-fns と -ftrap=common ならびに『数
値計算ガイド』を参照してください。
-fns[={no|yes}]
SPARC: SPARC 非標準の浮動小数点モードを選択しま
す。
このフラグを設定すると、プログラムが実行を開始する
ときに、非標準の浮動小数点モードが有効になります。
一部の SPARC プラットフォームでは、非標準の浮動小
数点モードは「段階的アンダーフロー」を無効にしま
す。つまり、小さな演算結果は、非正規数にはならず、
ゼロにフラッシュされます。また、非正規オペランドは
暗黙のうちにゼロに変更されます。
ハードウェアで段階的アンダーフローと非正規数がサ
ポートされていない SPARC プラットフォームでは、こ
のオプションを使用すると、プログラムによってはパ
フォーマンスが飛躍的に上がることがあります。
-fast などのマクロは、-fns を含む複数のオプション
に展開されます。マクロ中の -fns オプションの設定だ
けを変更したい場合は、マクロの指定の後に -fns オプ
ションを =yes または =no 付きで指定してください。
この指定内容は、マクロに含まれるものよりも優先され
ます。
-fns は -fns=yes と同義です。
-fns=yes と指定すると、非標準の浮動小数点が使用さ
れます。-fns=no と指定すると、標準の浮動小数点が使
用されます。
デフォルト:
このフラグを指定しない場合、非標準の浮動小数点モー
ドは自動的に有効になりません。代わりに、標準 IEEE
754 浮動小数点演算が行われます。つまり、アンダーフ
ローは段階的になります。
-fns だけを指定した場合、 -fns=yes が仮定されま
す。
警告:
非標準の浮動小数点が使用される場合は、浮動小数点算
術演算の結果が、IEEE 754 標準に準拠しないことがあ
ります。
このオプションは、SPARC プラットフォーム上でメイン
プログラムのコンパイル時に使用された場合にのみ有効
です。IA プラットフォームでは、このオプションは無
視されます。
-fns を使用してルーチンを 1 つコンパイルした場合、
プログラム中のその他すべてのルーチンも同じ -fns オ
プションを使用してコンパイルしてください。そうしな
いと、予想外の結果が生じることがあります。
-fprecision=a
(IA プラットフォーム) 浮動小数点の丸め精度モードを
設定します。a には、 single、 double、 extended の
いずれかを指定します。
-fprecision フラグは、浮動小数点制御ワード中の丸め
精度モードのビットを設定します。これらのビットは、
基本算術演算 (加算、減算、乗算、除算、平方根) の結
果を丸める精度を制御します。
以下に、a の値と意味を示します。
値 意味
single IEEE 単精度値に丸めます。
double IEEE 倍精度値に丸めます。
extended 最大精度値に丸めます。
a を single または double にすると、プログラムが実
行を開始するときに、丸め精度モードがそれぞれ単精度
または倍精度に設定されます。 a を extended にする
か、 -fprecision フラグを使用しないときは、丸め精
度モードは拡張精度のままになります。
single 精度の丸めモードでは、結果が 24 ビットの有
効桁に丸められます。また、 double 精度の丸めモード
では、53 ビットの有効桁に丸められます。デフォルト
の extended 精度のモードでは、64 ビットの有効桁に
丸められます。このモードは、レジスタ中の結果を丸め
るときの精度だけを制御します。レジスタの値には影響
がありません。レジスタ中の結果はすべて、拡張倍精度
形式のすべての範囲を使用して丸められます。メモリー
中に格納される結果は、指定した形式の範囲と精度を使
用して丸められています。
float 型の公称精度は、 single です。 long double
型の公称精度は、 extended です。
デフォルト:
-fprecision フラグが指定されていない場合、デフォル
トの丸め精度モードは extended になります。
警告:
このオプションは、IA プラットフォームで、メインプ
ログラムのコンパイル時に使用された場合にのみ有効で
す。SPARC プラットフォームでは、このオプションは無
視されます。
-fround=a IEEE 丸めモードを起動時に有効に設定します。
a には、 nearest、tozero、negative、positive のい
ずれかを指定してください。
値 意味
nearest もっとも近い値の方向に丸め、中間値の場合
は偶数にします。
tozero ゼロの方向に丸めます。
negative 負の無限の方向に丸めます。
positive 正の無限の方向に丸めます。
このオプションで設定される IEEE 754 丸めモードは以
下のものです。
o 定数式を評価するときにコンパイラが使用できる。
o プログラム初期化中の実行時に設定される。
これは、ieee_flags サブルーチンと同義で、実行時の
モード変更に使用できます。
デフォルト:
-fround オプションを指定しないとき、丸めモードはデ
フォルトで -fround=nearest になります。
警告:
このオプションを使用してルーチンを 1 つコンパイル
したら、プログラム中のその他のすべてのルーチンも
-fround=a を使用してコンパイルしてください。そうし
ないと、予想外の結果が生じることがあります。このオ
プションは、メインプログラムをコンパイルするときに
使用する場合だけ有効です。
-fsimple[=n]
浮動小数点の最適化を簡素化するために、仮定の設定レ
ベルを選択します。
n を指定する場合は、0、1、2 のいずれかを指定しま
す。
以下に、 -fsimple の値と意味を示します。
値 意味
0 仮定の設定を許可しません。IEEE 754 基準
に厳密に準拠します。
1 安全な簡素化を許可します。生成されるコー
ドは IEEE 754 に厳密には準拠していません
が、プログラムの数値演算の結果は、ほとん
どの場合変わりません。
-fsimple=1 を指定すると、オプティマイザ
は丸めや例外を完全に無視して最適化を行う
ことはできません。特に、浮動小数点演算の
場合で、実行時に適用される丸めモードで異
なる値を生成する演算には置き換えることは
できません。
-fasimple=1 を指定すると、オプティマイザ
は以下の事柄を仮定して最適化を行います。
o プロセスを初期化した後でも、IEEE 754
のデフォルトの丸めモードおよびトラップ
モードは変化しません。
o 潜在的な浮動小数点例外を除き、目に見え
る結果が生成されない演算は、削除される
可能性があります。
o オペランドとして無限大または非数 (NaN)
を使用した演算は、演算結果に NaN を反
映させる必要はありません。たとえば、
x*0 は 0 に置き換えられます。
o 演算は、ゼロの符号には依存しません。
2 丸め方法を変更して積極的な最適化を行うの
で、生成される数値結果が異なるプログラム
が多くなります。たとえば、x/y がループ中
で必ず 1 回以上評価され、 z=1/y および y
と z の値はループの実行中には定数値をと
ることが保証されている場合には、オプティ
マイザがそのループ中にある x/y という計
算をすべて x*z に置き換えることを許可し
ます。
デフォルト:
-fsimple を指定しない場合、コンパイラは -fsimple=0
を使用します。
-fsimple を指定するが、 n に値を指定しない場合、コ
ンパイラは -fsimple=1 を使用します。
警告:
このオプションは IEEE 754 に準拠しない場合がありま
す。
関連項目:
最適化が精度に与える影響の詳細は、Rajat Garg、Ilya
Sharapov 共著の Techniques for Optimizing Applica-
tions: High Performance Computing をお読みくださ
い。
-fstore (IA プラットフォーム) 強制的に浮動小数点式の精度を
使用します。
浮動小数点式または浮動小数点関数が変数に代入された
場合、または浮動小数点式がより短い浮動小数点型に
キャストされた場合に、レジスタに値をそのまま残さず
に、式または関数の値を代入式の左辺の型に変換しま
す。
このオプションを無効にするには、 -nofstore オプ
ションを使用してください。
警告:
四捨五入や切り上げによって、結果がレジスタの値と異
なることがあります。
-ftrap=a[,a...]
IEEE トラップモードを設定しますが、 SIGFPE ハンド
ラは組み込まれません。ieee_handler(3M) または
fex_set_handling(3M) を使用するとトラップを有効に
すると同時に SIGFPE ハンドラも組み込むことができま
す。複数の値を指定すると、リストは左から右の順番に
処理されます。
a には、次のいずれかを指定します。
値 意味
[no%]division ゼロによる除算時にトラップします [
しません]。
[no%]inexact 不正確な結果時にトラップします [し
ません]。
[no%]invalid 無効な演算時にトラップします [しま
せん]。
[no%]overflow オーバーフロー時にトラップします [
しません]。
[no%]underflow アンダーフロー時にトラップします [
しません]。
%all 上記すべての場合にトラップします。
%none 上記のいずれの場合にもトラップしま
せん。
common 無効な演算、ゼロによる除算、および
オーバーフロー時にトラップします。
このオプションの [no%] の形式は、 %all または com-
mon の値の意味を変更する場合に限って使用してくださ
い。例に示すとおり、必ずこれらいずれかの値とともに
使用する必要があります。 [no%] の形式だけでは、特
定のトラップが明示的に無効になることはありません。
IEEE トラップを有効にするには、 -ftrap=common を設
定することをお勧めします。
デフォルト:
-ftrap を指定しない場合、コンパイラは
-ftrap=%none と仮定します。
例: -ftrap=%all、no%inexact は、 inexact 以外のす
べてのトラップを設定することになります。
警告:
-ftrap を使用してルーチンを 1 つコンパイルした場
合、プログラムのすべてのルーチンも同じ -ftrap オプ
ションを使用してコンパイルしてください。そうしない
と、予想外の結果が生じることがあります。
-ftrap=inexact を使用してトラップすると、浮動小数
点値が正確に表現できない場合でもトラップが行われる
ため、注意が必要です。たとえば、次の文でこの状態が
発生します。
x = 1.0 / 3.0;
-G 実行可能ファイルでなく、動的共有ライブラリを構築し
ます。 ld(1) のマニュアルページおよび『C++ ユー
ザーズガイド』を参照してください。コマンド行で指定
するソースファイルはすべてデフォルトで -xcode=pic1
でコンパイルされます。
テンプレートを使用する共有ライブラリを構築すると
き、ほとんどの場合、テンプレートデータベースにイン
スタンス化されているテンプレート関数は共有ライブラ
リに取り込む必要があります。このオプションを使用す
ると、これらのテンプレートが必要に応じて自動的に共
有ライブラリに追加されます。
コンパイル時とリンク時の両方で指定する必要がある他
のコンパイラオプションとともに -G を指定して、共有
オブジェクトを作成する場合は、生成された共有オブ
ジェクトとリンクする際のコンパイル時とリンク時にも
必ず同じオブジェクトを指定してください。
-xcode の項目で説明しているように、共有オブジェク
トを作成する場合、-xarch=v9 を付けてコンパイルする
すべてのオブジェクトファイルには、 -xcode 値も明示
的に指定する必要があります。
-c が指定されていなければ、オプション -dy 、 -G 、
-R が ld に渡されます。
共用ライブラリの構築には、ld -G を使用しないで、CC
-G を使用してください。CC ドライバは C++ に必要な
ld に対していくつかのオプションを自動的に渡しま
す。
-G オプションを使用する場合、コンパイラはデフォル
トの -l オプションを ld に渡しません。共用ライブラ
リがその他の共用ライブラリに依存性を持つようにする
には、必要な -l オプションをコマンド行に渡す必要が
あります。例えば、共用ライブラリが libCrun に依存
するようにするには、 -lCrun をコマンド行に渡す必要
があります。
-g コンパイラとリンカーに、デバッグで使用するファイル
とプログラムを用意するように指示します。これには、
次の処理が含まれています。
o オブジェクトファイルと実行可能ファイルのシンボル
テーブル内に、詳細情報 (スタブ) を生成します。
o 「支援関数」を生成します。デバッガはこれを呼び出
して、デバッガの機能のいくつかを実装します。
o 関数のインライン化を不可にします。つまり、 +d オ
プションを指定したことになります。
o 特定のレベルの最適化を無効にします。
相互の関連性:
このオプションを -xO[level] 、あるいは、それと等
価なオプション ( -O など) と併用する場合、デバッ
グ情報が制限されます。詳細は -xO の項目を参照し
てください。
最適化レベル -xO3 かまたはそれ以下で、 -g0 を指
定する場合、コンパイラはほとんど完全な最適化とと
もに最善のシンボリック情報を提供します。末尾呼び
出し最適化およびバックエンドのインライン化は無効
になります。
最適化レベル -xO4 かそれ以上で、このオプションを
使用する場合、コンパイラはほとんど完全な最適化と
ともに最善のシンボリック情報を提供します。
このオプションを指定すると、 +d オプションは自動
的に指定されます。
注以前のリリースでは、このオプションは、コンパイ
ラのリンク専用の呼び出しで、リンカー(ld) ではな
く、強制的にデフォルトでインクリメンタルリンカー
(ild) を使用するようにしていました。すなわち、-g
が指定されたときのコンパイラは、そのデフォルトの
動作として、コマンド行に -G またはソースファイル
の指定がなくてもオブジェクトファイルのリンクで必
ず、ld の代わりに ild を自動的に呼び出していまし
た。このリリースではこのようにならず、リンク専用
の呼び出しでは、コンパイラは、-xildon が指定され
た場合にのみ ild を使用します。
パフォーマンスアナライザのすべての機能を使用するに
は、 -g でコンパイルしてください。パフォーマンス解
析の機能には、 -g を必要としないものありますが、注
釈付きのソース、機能レベル情報、コンパイラコメント
メッセージを表示するには、 -g でコンパイルする必要
があります。詳細については、analyzer(1) マニュアル
ページおよび『プログラムのパフォーマンス解析』の
「データ収集と解析のためのプログラムの準備」を参照
してください。
-g で生成されたコメントメッセージは、プログラムを
コンパイルする際にコンパイラが生成する最適化と変換
について記述します。ソースコードでインタリーブされ
たメッセージを表示するには、 er_src(1)、コマンドを
使用してください。
警告
プログラムのコンパイルとリンクを別々のステップで行
う場合、一方のステップで -g オプションを含め、他方
のステップで含めなくても、プログラムの正しさに影響
はありませんが、プログラムのデバッグ機能に影響が出
ます。-g (または
-g0) を付けずにコンパイルして、リンクで -g (また
は -g0) を付けなかった場合、どのモジュールもデバッ
グできるように正しく作成されません。通常、関数
main を含むモジュールをデバッグするには、 -g (また
は -g0) を付けてコンパイルする必要があります。
関連項目:
ld(1) のマニュアルページのほかに、 -g0、-xs、およ
び +d の項目も参照してください。
-g0 デバッガ用のシンボルテーブル情報を生成します。ただ
し、C++ のインライン展開は可能なままです。このオプ
ションは、 +d が無効になることと
dbx がインライン関数にステップインできないことを
除いて、 -g と同義です。
+d も参照してください。
-H 標準エラー出力 ( stderr ) に、現在のコンパイルで対
象となる各 #include ファイルのパス名が 1 行ずつ出
力されます。
-h[ ]lname
生成される共有動的ライブラリに名前 lname を割り当
てます。
これはローダー用のオプションで、 ld に渡されます。
-h の後に指定する名前は、 -o オプションで指定した
ファイル名と同一にします。 -h と lname の間には、
空白を入れても入れなくてもかまいません。
コンパイル時のローダーは、指定された lname を作成
中の動的共有ライブラリに割り当て、その lname をそ
のライブラリのイントリンシック名としてライブラリの
中に記録します。 -hlname オプションを指定しない場
合には、イントリンシック名はライブラリファイルに記
録されません。
実行可能ファイルはすべて、必要な共有ライブラリファ
イルのリストを持っています。実行時のリンカーは、ラ
イブラリを実行可能ファイルにリンクするとき、ライブ
ラリのイントリンシック名をこの共有ライブラリファイ
ルのリストの中にコピーします。共有ライブラリにイン
トリンシック名がないと、リンカーは代わりにその共有
ライブラリファイルのパス名をコピーします。以下に例
を示します。
% CC -G -o libx.so.1 -h libx.so.1 a.o b.o c.o
相互の関連性:
このオプションは上書きされずに累積されます。
-help -xhelp=flags と同義です。
-i LD_LIBRARY_PATH の設定を無視するようにリンカー
ld(1) に伝えます。
-Ipathname
相対ファイル名 (先頭が / でないファイル名) で指定
されたインクルードファイルの検索ディレクトリのリス
トに 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
注 - ファイル名が標準ヘッダーのファイル名と重なっ
てしまった場合は、『C++ ユーザーズガイド』の「標準
ヘッダーの実装」を参照してください。
相互の関連性:
このオプションは上書きされずに累積されます。
-I- オプションを使用すると、デフォルトの検索規則を
変更できます。
-library=no%Cstd を指定した場合、コンパイラが提供
する Cstd ヘッダーファイルは検索されません。
注 - -ptipath オプションが使用されていない場合、コ
ンパイラは -Ipathname 中のテンプレートファイルを探
します。 -ptipath オプションではなく、 -Ipathname
オプションを使用することをお勧めします。
-I- インクルードファイルの検索規則を次のように変更しま
す。
o #include "foo.h" という形式のインクルードファ
イルの場合は、次の順序でディレクトリを検索し
ます。
1. -I オプションで ( -I- の前と後の両方で)
指定されたディレクトリ
2. コンパイラが提供する C++ ヘッダーファイ
ル、ANSI C ヘッダーファイル、および特殊
ファイルのためのディレクトリ
3. /usr/include
o #include <foo.h> という形式のインクルードファ
イルの場合は、次の順序でディレクトリを検索し
ます。
1. -I オプションで ( -I- の前と後の両方で)
指定されたディレクトリ
2. コンパイラが提供する C++ ヘッダーファイ
ル、ANSI C ヘッダーファイル、および特殊
ファイルのためのディレクトリ
3. /usr/include
警告:
-I- オプションは、コマンド行 1 行につき 1 度しか使
用できません。
-i すべての LD_LIBRARY_PATH 設定を無視するようリン
カー ld(1) に伝えます。
-inline -xinline と同じです。
-instances=a
テンプレートのインスタンスの配置とリンクを制御しま
す。以下に a の値と意味を示します。
値 意味
extern 必要なすべてのインスタンスを comdat セク
ションに配置し、大域的なリンケージを与え
ます (リポジトリ内のインスタンスが古い場
合は、再インスタンス化が行われます)。
注: コンパイルとリンクを別々のステップで
行なうときに、コンパイルのステップで
-instance=extern を指定すると、同じよう
にリンクのステップでも指定しなければなり
ません。
explicit 明示的にインスタンス化されたインスタンス
を comdat セクション内の現在のオブジェク
トファイルに配置し、大域リンケージを与え
ます。必要なその他のインスタンスは生成し
ません。
global すべての必要なインスタンスを comdat セク
ション内の現在のオブジェクトファイルに配
置し、大域リンケージを与えます。
semiexplicit
明示的にインスタンス化されたインスタンス
とすべての必要なインスタンスを comdat セ
クション内の現在のオブジェクトファイルに
配置し、大域リンケージを与えます。
static 注: -instances=static は旧式なものとなり
ました。-instances=global が static の利
点を備えながら欠点をなくしたため、
-instances=static を使う理由はなくなりま
した。このオプションは古いコンパイラで発
生する問題を克服するために提供されていま
したが、こうした問題はコンパイラのこの
バージョンには存在しません。
すべての必要なインスタンスを現在のオブ
ジェクトファイルに配置し、静的リンケージ
を与えます。
デフォルト:
-instances を指定しない場合、 -instances=global が
仮定されます。
警告:
値として static および semiexplicit を指定すると、
無効な結果になることがあります。詳細は『C++ ユー
ザーズガイド』を参照してください。
-instlib=file
このオプションを使用すると、静的ライブラリ、共有ラ
イブラリ、または現在のオブジェクトの中で、重複する
テンプレートインスタンスの生成を禁止できます。一般
に、ライブラリを使用するプログラムが多数のインスタ
ンスを共有する場合、-instlib=file を指定してコンパ
イル時間の短縮を試みることができます。
値:
file 引数を使って、既存のテンプレートインスタンス
が含まれていることがわかっているライブラリを指定し
ます。ファイル名の引数にはスラッシュ(「/」) が入っ
ていなければなりません。現在のディレクトリへの相対
パスとしては、ドットとスラッシュ(「./」)を使いま
す。
デフォルト:
-instlib=file オプションにはデフォルトはなく、指定
した場合にのみ働きます。このオプションは複数指定で
き、指定内容は追加されていきます。
例:
libfoo.a ライブラリと libbar.so ライブラリが、ソー
スファイル a.cc と共有する多数のテンプレートインス
タンスをインスタンス化するとします。 -instlib=file
を追加してライブラリを指定すると、冗長性が回避さ
れ、コンパイル時間の削減に役立ちます。
example% CC -c -instlib=./libfoo.a
-instlib=./libbar.so a.cc
相互の関連性:
-g を使ってコンパイルするとき、-instlib=file で指
定されたライブラリが -g でコンパイルされていない
と、そのテンプレートインスタンスはデバッグできるよ
うになりません。対処方法は、-g を使うときには
-instlib=file を避けるようにすることです。
file の検索に、-L のパスは調べられません。
警告
-instlib でライブラリを指定する場合は、リンク時に
そのライブラリを使用しなければなりません。
関連項目:
-template 、-instances 、-pti
-KPIC (SPARC プラットフォーム) -xcode=pic32 と同義です。
(IA プラットフォーム) -Kpic と同義です。
-Kpic -xcode=pic13 と同義です。
(SPARC プラットフォーム) -xcode=pic13 と同義です。
(IA プラットフォーム) 位置独立コードを生成します。
このオプションは、共有ライブラリを構築するときに
ソースファイルを構築するために使用します。大域的な
データへの各参照はポインタの間接参照として大域的な
オフセットテーブルに生成されます。各関数呼び出し
は、手続きリンケージテーブル経由で、PC の相対アド
レッシングモードで生成されます。
-keeptmp コンパイル中に作成された一時ファイルをすべて保持し
ます。このオプションを -verbose=diags と一緒に使用
すると、デバッグに便利です。
-Lpath ライブラリ検索パスに path を追加します。
このオプションは ld に渡されます。リンカーは path
で指定されたディレクトリを検索してから、コンパイラ
が提供するディレクトリを検索します。
相互の関連性:
このオプションは上書きされずに累積されます。
-llib リンカーのライブラリ検索用のリストにライブラリ
liblib.a または liblib.so を追加します。
このオプションは ld に渡されます。通常のライブラリ
は、 liblib.a または liblib.so ( lib と .a または
.so の部分は必須) という名前を持っています。このオ
プションでは、 lib の部分を指定できます。1 行のコ
マンド行に希望する数だけのライブラリを指定できま
す。これらのライブラリは、 -Lpath で指定した順序で
検索されます。
このオプションは、オブジェクトファイル名の後に指定
してください。
相互の関連性:
このオプションは上書きされずに累積されます。
警告:
マルチスレッドアプリケーションを構築したり、マルチ
スレッドライブラリにアプリケーションをリンクする場
合には、 -lthread を使ってアプリケーションを直接的
にリンクする代わりに、 -mt オプションを使ってプロ
グラムをコンパイルし、リンクしなければなりません。
関連項目:
-mt
-libmieee -xlibmieee を使用します。
-libmil -xlibmil を使用します。
-library=lib[,lib...]
指定した CC 提供ライブラリをコンパイルとリンクに組
み込みます。
-library オプションを使って CC 提供ライブラリを指
定した場合、コンパイル時に適切な -I パスが設定さ
れ、リンク時には適切な -L, -Y, -P, および -R パス
と -l オプションが設定されます。
値:
以下に lib の値と意味を示します。
互換モード (-compat[=4]) の場合:
値 意味
[no%]f77 推奨しません。使用しないでくだ
さい。 -xlang=f77 を使用してく
ださい。
[no%]f90 推奨しません。使用しないでくだ
さい。 -xlang=f90 を使用してく
ださい。
[no%]f95 推奨しません。使用しないでく
ださい。 -xlang=f95 を使用し
てください。
[no%]rwtools7 従来の iostreams Tools.h++
バージョン 7 を使用します [し
ません]。
[no%]rwtools7_dbg デバッグが有効な Tools.h++
バージョン 7 を使用します [し
ません]。
[no%]complex libcomplex (複素数演算) を使用
します [しません]。
[no%]interval 推奨しません。使用しないでくだ
さい。 -xia を使用してくださ
い。
[no%]libC libC (C++ サポートライブラリ)
を使用します [しません]。
[no%]gc libgc (ガベージコレクション)
を使用します [しません]。
[no%]sunperf SPARC: Sun Performance
Library(TM) を使用します [しま
せん]。
%none libC を除いたいずれの C++ ライ
ブラリも使用しません。
標準モード (デフォルトモード) の場合:
値 意味
[no%]f77 推奨しません。使用しないでくだ
さい。 -xlang=f77 を使用してく
ださい。
[no%]f90 推奨しません。使用しないでくだ
さい。 -xlang=f90 を使用してく
ださい。
[no%]f95 推奨しません。使用しないでく
ださい。 -xlang=f95 を使用し
てください。
[no%]rwtools7 従来の iostreams Tools.h++
バージョン 7 を使用します [し
ません]。
[no%]rwtools7_dbg デバッグが有効な Tools.h++
バージョン 7 を使用します [し
ません]。
[no%]rwtools7_std 標準 iostreams Tools.h++ バー
ジョン 7 を使用します [しませ
ん]。
[no%]rwtools7_std_dbg
デバッグが有効な標準 iostreams
Tools.h++ バージョン 7 を使用
します [しません]。
[no%]interval 推奨しません。使用しないでくだ
さい。 -xia を使用してくださ
い。
[no%]iostream libiostream (従来の iostream
ライブラリ) を使用します [しま
せん]。
[no%]Cstd libCstd (C++ 標準ライブラリ)
を使用します [しません]。コン
パイラが提供する Cstd ヘッダー
ファイルをインクルードします [
インクルードしません]。
[no%]stlport4 標準ライブラリのSTL ポートの実
装を使用します [しません]。
-library=stlport4 を指定する
と、コマンドは
-library=no%Cstd,stlport4 に拡
張されます。
[no%]stlport4_dbg STLport のデバッグが有効なライ
ブラリを使用します[しません]。
[no%]Crun libCrun (C++ 実行時ライブラリ)
を使用します [しません]。
[no%]gc libgc (ガベージコレクション)
を使用します [しません]。
[ no% ]sunperf SPARC: Sun Performance Library
(TM) を使用します [しません]。
%none libC run 以外のいずれの C++ ラ
イブラリも使用しません。
デフォルト:
互換モード (-compat[=4])で -library が指定されない
場合、 -library=%libC が指定されます。
libC ライブラリは -library=no%libC を使用して特別
に除外されない限り、常にインクルードされます。
標準モード (デフォルトモード) で、 -library が指定
されない場合、 -library=%none,Cstd が指定されま
す。
libCstd ライブラリは、-library=%none または
-library=no%Cstd または -library=stlport4 を使用し
て特別に除外されない限り、常にインクルードされま
す。
libCrun ライブラリは -library=no%Crun を使用して特
別に除外されない限り、常にインクルードされます。
例:
C++ ライブラリ (libCrun を除く) なしで標準モード (
デフォルトモード) でリンクするには、次のコマンドを
使用します。
example% CC -library=%none
標準モードで従来の iostreams Rogue Wave tools.h++
ライブラリを取り込むには、次のコマンドを使用しま
す。
example% CC -library=rwtools7,iostream
標準モードで標準 iostreams Rogue Wave tools.h++ ラ
イブラリを取り込むには、次のコマンドを使用します。
example% CC -library=rwtools7_std
互換モードで従来の iostreams Rogue Wave tools.h++
ライブラリを取り込むには、次のコマンドを使用しま
す。
example% CC -compat -library=rwtools7
標準モード (デフォルトモード) で従来の iostreams
Rogue Wave tools ライブラリを取り込む場合、libios-
tream も含める必要があります (詳細は『C++ 移行ガイ
ド』を参照)。標準 iostreams Rogue Wave tools ライ
ブラリは、標準モードでのみ使用できます。以下のコマ
ンド例は、Rogue Wave tools.h++ ライブラリオプショ
ンの有効な使用法と無効な使用法を示しています。
有効:
example% CC -compat -library=rwtools7 foo.cc
無効:
example% CC -compat -library=rwtools7_std foo.cc
有効 (従来の iostreams)
example% CC -library=rwtools7,iostream foo.cc
無効
example% CC -library=rwtools7 foo.cc
有効 (標準 iostreams)
example% CC -library=rwtools7_std foo.cc
無効
example% CC -library=rwtools7_std,iostream foo.cc
libCstd と libiostream を両方含める場合、同じファ
イルにアクセスするためにプログラム内で古い形式と新
しい形式の iostreams (たとえば cout と std::cout)
を混在しないように気を付けてください。同一プログラ
ム内に標準 iostreams とクラシック iostreams が混在
する場合、従来のものと標準 iostream コードから同じ
ファイルにアクセスがあると問題が発生する恐れがあり
ます。
libC にも libCrun にもリンクしないプログラムは、
C++ 言語のすべての機能を使用できないことがありま
す。
-xnolib が指定されると、-library は無視されます。
相互の関連性:
-library を使用してライブラリを指定すると、コンパ
イル時に適切な -I パスが設定されます。リンク時には
適切な -L、-Y、-P、-R パスおよび -I オプションが設
定されます。
このオプションは上書きされずに累積されます。
rwtool ライブラリは一度に 1 つだけ使用できます。
-library=stlport4 では rwtool ライブラリを使用でき
ません。
-library=stlport4 および -library=Cstd は同じコマ
ンド行では使用できません。
-library=sunperf および -xlic_lib=sunperf は、同じ
コマンド行では使用できません。
-library オプションを使用すると、指定ライブラリに
対する -l オプションが必ず適切な順序で出力されま
す。たとえば -library=rwtools7,iostream および
-library=iostream,rwtools7 の両方の場合、-l オプ
ションが -lrwtool -liostream の順序で ld に渡され
ます。
区間演算ライブラリを使用する場合は、 libCstd、
libC、 libiostreams のいずれかのライブラリを使用し
なければなりません。
指定したライブラリは、システムサポートライブラリが
リンクされる前にリンクされます。
警告:
STLport、Rogue Wave、Sun Microsystems の C++ ライ
ブラリの構成マクロはいずれも再定義したり変更したり
しないでください。これらのライブラリは C++ コンパ
イラとともに動作するように構成および構築されていま
す。libCstd と Tool.h++ は相互に働き合うように構成
されているので、その構成マクロを変更すると、プログ
ラムがコンパイル、リンクされなかったり、あるいは正
しく実行されなかったりします。
コンパイルとリンクを別々の手順で実行する場合、コン
パイルコマンドの -library オプションで指定した内容
は、リンクコマンドでも指定される必要があります。
一連のライブラリ群は恒久的なものではないため、リ
リースごとに変更される可能性があります。
stlport4、Cstd、iostream の各ライブラリにはそれぞ
れの入出力ストリームの実装が存在します。-library
オプションでこれらの中から複数を指定すると、結果と
して、プログラムが予測できない動作をする可能性があ
ります。
関連項目:
-I、 -l、 -R、 -staticlib、 -xia、 -xlang、 -xno-
lib
『C++ 移行ガイド』、『C++ Interval Arithmetic Pro-
gramming Reference』『Tools.h++ ユーザーズガイ
ド』、『Tools.h++ クラスライブラリ・リファレンスマ
ニュアル』、『Standard C++ Class Library Refer-
ence』
-mc オブジェクトファイルの .comment セクションから重複
している文字列を削除します。文字列が空白文字を含む
場合、その文字列を引用符で囲む必要があります。mc
オプションを使用すると、 -mcs -c コマンドが呼び出
されます。
-migration
以前のバージョンのコンパイラ用に構築されたソース
コードの移行についての情報が置かれている場所につい
て記述しています。
注 - このオプションは次のリリースで廃止される予定
です
-misalign (SPARC プラットフォーム) メモリー中に境界整列の
誤ったデータが存在することを許可します。このオプ
ションを指定しないと、境界列の正しくないデータに対
してエラーが生成されます。
このオプションは、プログラム内のデータが正しく整合
されていないことをコンパイラに通知します。したがっ
て、正しく整合されない可能性のあるデータについて
は、読み込みと保存を抑えなければなりません (具体的
には一度に 1 バイト)。このオプションを使用すると、
実行時の性能が大幅に低下することがあります。この性
能低下の度合いは、アプリケーションによって異なりま
す。
コンパイルとリンクを別の工程で行ない、 -misalign
オプションを使用する場合は、両方の工程で -
misalign オプションを指定しなければなりません。
可能な場合は、プログラム中の境界整列の正しい部分と
正しくない部分を互いにリンクしないようにしてくださ
い。
相互の関連性:
o SPARC プラットフォームで #pragma pack を使ってタ
イプのデフォルト整列よりも濃密なパックを実行する
ときは、アプリケーションのコンパイルとリンクの両
方で -misalign オプションを指定しなければなりま
せん。
o 不整合データは、実行時に ld から供給されるトラッ
プ機構によって処理されます。 -misalign オプショ
ンとともに最適化フラグ (-xO{1|2|3|4|5} かそれと
同等のフラグ) を使用する場合には、不整合データの
整合に要求される追加の命令はオブジェクトファイル
の中に挿入され、実行時不整合トラップは生成しませ
ん。
-mr[,string]
オブジェクトファイルの .comment セクションからすべ
ての文字列を削除し、string が指定された場合は、そ
のセクションに string を配置します。文字列が空白文
字を含む場合、その文字列を引用符で囲む必要がありま
す。このオプションを使用すると、コマンドmcs -d [-a
string] が呼び出されます。
相互の関連性:
このオプションは -S、-xsbfast、-sbfast のどれかが
指定されている場合は、有効ではありません。
-mt マルチスレッド化されたコード用のコンパイルおよびリ
ンクを行います。
このオプションは次のことを実行します:
o -D_REENTRANT をプリプロセッサに渡します。
o -lthread を正しい順序で ld に渡します。
o 標準モード (デフォルトモード) で、 libCrun より
も前に libthread がリンクされることを保証しま
す。
o 互換モード (-compat) で libC よりも前に lib-
thread がリンクされることを保証します。
-mt オプションは、アプリケーションやライブラリがマ
ルチスレッド化されている場合に必要です。
警告:
適切なライブラリのリンクの順序を確認するために、
-lthread ではなく、このオプションを使用して lib-
thread でリンクしてください。
POSIX スレッドを使用する場合には -mt -lpthread オ
プションを使ってリンクしなければなりません。マルチ
スレッドアプリケーションでは、 libC
(互換モード) と libCrun (標準モード) に libthread
が必要なので、 -mt オプションが必要です。
別々のステップでコンパイルとリンクを行い、-mt でコ
ンパイルした場合、予期しない結果になる可能性があり
ます。-mt で一つの翻訳単位をコンパイルする場合、プ
ログラムのすべての単位を -mt でコンパイルしてくだ
さい。
並列 Fortran オブジェクトと C++ オブジェクトを混在
させる場合は、リンク行に -mt フラグを指定しなけれ
ばなりません。
互換モード (-compat=4) では C99 サポートは利用でき
ません。
関連項目:
-xnolib
-native -xtarget=native を使用します。
-noex -features=no%except を使用します。
-nofstore (IA プラットフォーム) 式の精度を強制しません。
このオプションでは、浮動小数点の式または関数の値
が、代入式の左辺の型に強制的に変換されることはあり
ません。また、浮動小数点の式または関数を変数に割り
当てたり、短い浮動小数点型に変換しても、レジスタ中
の値は保持されます。
-fstore も参照してください。
-nolib -xnolib を使用します。
-nolibmil -xnolibmil を使用します。
-noqueue ライセンスを待ち行列に入れません。ライセンスを取得
できないと、コンパイラは要求を待ち行列に入れたり、
コンパイルを行わずに終了します。メークファイルのテ
ストでは、ゼロ以外の状態が返されます。
-norunpath
共有ライブラリ用のパスを実行可能ファイル中に構築し
ません。
実行可能ファイルが共有ライブラリを使用している場
合、コンパイラは通常、実行時リンカーに共有ライブラ
リの場所を伝えるために、構築を行なったパスを知らせ
ます。具体的には、コンパイラが -R オプションを ld
に渡します。このパスは、コンパイラのインストール先
ディレクトリによって決まります。
製品用の実行可能ファイルを構築する場合で、その製品
のユーザーが共有ライブラリのパスとして、プログラム
で使用されるパスとは異なるパスを使用する可能性があ
るときに、このオプションを使用することをお勧めしま
す。
相互の関連性:
コンパイラがインストールされた場所 (デフォルトは
/opt/SUNWspro/lib) でいずれかの共有ライブラリを使
用し、同時に -norunpath も使用する場合は、リンク時
に -R を指定するか、実行時に LD_LIBRARY_PATH 環境
変数を設定して共有ライブラリの位置を指定する必要が
あります。これによって、実行時リンカーが共有ライブ
ラリを検索できるようになります。
-O The -O マクロは、-xO2 ではなく、-xO3 に展開される
ようになりました。このデフォルトの変更によって、実
行時の性能が向上します。ただし、あらゆる変数を自動
的に volatile と見なすことを前提にするプログラムの
場合、-xO3 は不適切になることがあります。このこと
を前提とする代表的なプログラムとしては、専用の同期
方式を実装するデバイスドライバや古いマルチスレッド
アプリケーションがあります。回避策は、<TT>-o</TT>
ではなく、 -xO2 を使ってコンパイルすることです。
-O [ level ]
-xO level を使用します。
-ofilename
コンパイラが生成するバイナリファイル (接尾時 .o )
または実行可能ファイルの名前 filename を指定しま
す。
注 - コンパイラは、テンプレートインスタンスを格納
する必要がある場合に、出力ファイルのディレクトリに
あるテンプレートリポジトリにテンプレートインスタン
スを格納します。
警告:
filename (ファイル名) には、コンパイルが作成する
ファイルの種類を示す適切な接尾辞を付けてください (
「ファイル」の項目を参照)。また、 CC このオプショ
ンは上書きされずに累積されます。 filename とソース
ファイルを同じにしないでください。
+p 非標準プリプロセッサ断定を無視します。
デフォルト:
+p が存在しない場合、コンパイラは非標準プリプロ
セッサ表明を認識します
相互の関連性:
+p を使用する場合は、 sun, unix, sparc, および
i386 マクロは定義されません。
-P ソースの前処理だけを行います。コンパイルは行いませ
ん ( .i という接尾辞の付いたファイルが生成されます
)。
このオプションでは、プリプロセッサが出力するような
行番号はファイルに出力されません。
-p prof(1) でプロファイリングを行うためのデータを収集
するオブジェクトコードを作成します。実行内容を記録
し、正常終了時に mon.out というファイルを生成しま
す。
警告:
別々のステップでコンパイルおよびリンクする場合、
-p オプションはコンパイルコマンドおよびリンクコマ
ンド両方に存在する必要があります。あるステップに
-p をインクルードして、その他のステップにはインク
ルードしなくてもプログラムの正確さには影響ありませ
んが、プロファイルができなくなるでしょう。
-xpg -xprofile analyzer(1) のマニュアルページを参
照してください。
『プログラムのパフォーマンス解析』
-pentium (IA プラットフォーム) -xtarget=pentium を使用しま
す。
-pg -xpg を使用します。SPARC: -xcode=pic32 と同じで
す。
IA: -KPIC と同じです。
-pic SPARC: -xcode=pic13 と同じです。
IA: -Kpic と同じです。
-pta -template=wholeclass を使用します。
-ptipath テンプレートソースの検索対象ディレクトリを指定しま
す。
これは、 -Ipathname で設定した通常の検索パスに代わ
るオプションです。 -ptipath フラグを使用すると、コ
ンパイラはこのパス上でテンプレート定義ファイルを探
し、 -Ipathname フラグを無視します。
-ptipath の代わりに、 -Ipathname フラグを使用する
と、混乱が起きにくくなります。
相互の関連性:
このオプションは上書きされずに累積されます。
-pto -instances=static を使用します。
-ptrpath このオプションは廃止されており、コンパイラによって
無視されます。
警告:
-ptr オプションは無視されますが、今後のリリース
で、異なる扱いで再利用される可能性があるので、すべ
てのコンパイルコマンドから削除する必要があります。
-ptv -verbose=template を使用します。
-Qoptionphase[,option...]
オプション option をコンパイル段階に渡します。
コンパイル段階 phase に指定するオプションは、以下
のとおりです。
SPARC IA
ccfe ccfe
iropt cg386
cg codegen
CClink CClink
ld ld
例:
ld が CC ドライバから起動されたとき、 -Qoption は
-i オプションを ld に渡します。
example% CC -Qoption ld -i test.cc
警告:
意図しない結果を防ぐために注意してください。次はそ
の例です。
-Qoption ccfe -features=bool,iddollar
これは次のように解釈されます。
-Qoption ccfe -features=bool -Qoption ccfe iddol-
lar
正しい用法は次のとおりです。
-Qoption ccfe -features=bool,-features=iddollar
-qoption phase option
-Qoption を使用します。
-qp -p と同義です。
-Qproduce sourcetype
CC ドライバに sourcetype に指定した種類のソース
コードを生成するよう指示します。以下に、ソースコー
ドの種類を示します。
値 意味
.i ccfe が作成する前処理済みの C++ の
ソースコード
.o コード生成プログラムが作成するオブ
ジェクトファイル
.s コード生成プログラムが作成するアセ
ンブラソース
-qproduce sourcetype
-Qproduce を使用します。
-Rpath[:path...]
動的ライブラリの検索パスを実行可能ファイルに構築し
ます。
このオプションは、 ld に渡されます。
デフォルト:
-R オプションが存在しない場合、ライブラリは出力オ
ブジェクトに記録されたパスを検索し、 -xarch オプ
ション ( -xarch が連結されていない場合は、
-xarch-generic が仮定されます) により指定された
ターゲットアーキテクチャー命令に依存する実行時リン
カーに渡されます。
-xarch=v9 、 -xarch=v9a、または -xarch=v9b:
<install-directory>/SUNWspro/lib/v9
その他の -xarch 値:
<install-directory>/SUNWspro/lib
標準インストールでは、<install-directory> は /opt
になります。
相互の関連性:
このオプションは上書きされずに累積されます。
環境変数 LD_RUN_PATH と -R オプションの両方を指定
すると、 -R オプションで指定したパスが検索され、
LD_RUN_PATH で指定されたパスは無視されます。
関連項目:
-norunpath
-readme -xhelp=readme と同義です。
-S アセンブリコードのコンパイルと生成だけを行います。
CC ドライバはプログラムをコンパイルして、アセンブ
リソースファイルを作成しますが、プログラムのアセン
ブルは行いません。このアセンブリソースファイル名に
は、 .s という接尾辞が付きます。プログラムのアセン
ブルは行いませんが、接尾辞 .s の付いたアセンブリ
ソースファイルを生成します。
-s 実行可能ファイルからシンボルテーブルを削除します。
出力される実行可能ファイルからすべてのシンボル情報
が削除されます。このオプションは ld に渡されます。
-sb CC -xsb を使用します。
-sbfast -xsbfast を使用します。
-staticlib=l[,l...]
-library オプション (デフォルトのライブラリを含む)
により、 -xlang オプション中で、 -xia オプションを
使用して指定される C++ ライブラリのうち、静的にリ
ンクされるライブラリを指示します。
値:
l には、次のいずれかを指定します。
値 意味
[no%]library library に静的にリンクします [しま
せん]。library に有効な値は、すべて
-library に有効な値 ( %all および
%none を除く) および -xlang に有効
な値、および interval ( -xia と連結
して使用) です。
%all -library オプションにより指定された
すべてのライブラリ、 -xlang オプ
ションに指定されたすべてのライブラ
リ、 -xia が指定された場合は区間ラ
イブラリを静的にリンクします。
%none -library オプションおよび -xlang オ
プションに指定されたライブラリに静
的にリンクしません。 -xia がコマン
ド行に指定された場合、区間ライブラ
リを静的にリンクしません。
デフォルト:
-staticlib を指定しないときは、 -staticlib=%none
が仮定されます。
相互の関連性:
このオプションは上書きされずに累積されます。
-staticlib オプションは、-xia オプション、-xlang
オプション、および -library オプションで明示的に選
択された C++ ライブラリ、または、デフォルトで暗黙
的に選択された C++ ライブラリだけに機能します。互
換モード (-compat=[4]) では、 libC がデフォルトで
選択されます。標準モード (デフォルトのモード) で
は、 Cstd と Crun がデフォルトで選択されます。
例:
次のコマンドは、 Crun が -library のデフォルト値で
あるため、 libCrun を静的にリンクします。
(正)
example% CC -staticlib=Crun test.cc
ただし、 libgc は -library オプションで明示的に指
定されない限りリンクされないので、次のコマンドは
libgc をリンクしません。
(誤)
example% CC -staticlib=gc test.cc
次のコマンドは、librwtool ライブラリを動的にリンク
します。librwtool はデフォルトのライブラリでもな
く、-library オプションでも選択されていないため、
-staticlib の影響はありません。
(誤)
example% CC -lrwtool -library=iostream \
-staticlib=rwtools7
次のコマンドは、Tools.h++ ライブラリを静的にリンク
します。
(正)
example% CC -library=rwtools7,iostream \
-staticlib=rwtools7
警告:
使用できるライブラリの値は安定しておらず、リリース
ごとに変わることがあります。
-xarch=v9 、 -xarch=v9a 、または -xarch=v9b (また
は同じ意味の 64 ビットアーキテクチャーオプション)
を使用するときには、一部のライブラリは静的ライブラ
リとして使用できません。
-sync_stdio=[yes|no]
C++ の入出力ストリームと C の stdio の間の同期が原
因で実行時性能が低下する場合は、このオプションを使
用してください。同期が必要なのは、同一プログラム内
で cout への書き込みに入出力ストリーム、stdout へ
の書き込みに stdio を使用する場合だけです。C++ 規
格では、この同期は必須で、デフォルトでは、C++ コン
パイラは、同期を有効にします。しかしながら、しばし
ば、アプリケーションの性能は、同期なしの方がずっと
良くなります。プログラムが cout と stdout の両方に
書き込みを行うのでなければ、この -sync_stdio=no オ
プションを使って同期を無効にできます。
デフォルト:
-sync_stdio が指定されなかった場合は、
-sync_stdio=yes に設定されます。
例:
次の例を考えてみてください。
#include <stdio.h>
#include <iostream>
int main()
{
std::cout << "\nHello ";
printf("beautiful ");
std::cout << "world!";
printf("\n");
}
同期が有効の場合、このプログラムは、次の 1 行をを
出力するだけです。
Hello beautiful world!
同期が無効の場合、出力は競合してしまいます。
警告:
このオプションは、ライブラリではなく、実行可能ファ
イルのリンクの場合にのみ有効です。
-temp=path
一時ファイル用のディレクトリを定義します。
コンパイル中に生成される一時ファイル用のディレクト
リとして path を指定します。
-keeptmp を参照してください。
-template=a[,a...]
各種のテンプレートオプションを有効または無効にしま
す。
a には、次のいずれかを指定します。
値 意味
[no%]extdef 別のソースファイル中のテンプ
レート定義を検索します [しませ
ん]。
[no%]geninlinefuncs 明示的にインスタンス化されたク
ラステンプレートのインラインメ
ンバー関数をインスタンス化しま
す [しません]。
[no%]wholeclass 使用されている関数だけではな
く、テンプレートクラス全体をイ
ンスタンス化します [しません
]。少なくともクラス中の一つの
メンバーを参照する必要がありま
す。それ以外は、コンパイラはク
ラスのいずれのメンバーもインス
タンス化しません。
デフォルト:
-template=no%wholeclass,extdef,no%geninlinefuncs
-time -xtime を使用します。
-Uname プリプロセッサシンボル name の初期定義を削除しま
す。このオプションは -D が同じコマンド行で作成した
マクロシンボル name の初期定義を削除します。これに
は、コマンド行ドライバにより暗黙的に置かれたものも
含まれます。
その他のソースファイル中で使用される事前定義された
マクロやマクロ定義に影響はありません。
コマンド行ドライバによりコマンド行に置かれた -D オ
プションを参照するには、コマンド行に -dryrun オプ
ションを追加してください。
-U オプションは、1 行のコマンド行で複数回指定でき
ます。
例:
以下のコマンドは事前定義されたシンボル __sun を未
定義にします。 #ifdef(__sun) のような test.cc 中の
プリプロセッサ文は、シンボルが未定義であることを意
味しています。
example% CC -U__sun test.cc
相互の関連性:
このオプションは上書きされずに累積されます。
すべての -U オプションは、存在するすべての -D オプ
ションの後で処理されます。
-unroll=n -xunroll=n と同義です。
-V -verbose=version と同義です。
-v -verbose=diags と同義です。
-vdelx 非推奨。使わないでください。このフラグは互換モード
(-compat[=4]) だけで利用できます。
delete[] を使用する式では、このオプションにより、
_vector_delete_ への呼び出しではなく、実行時ライブ
ラリ関数 _vector_deletex_ への呼び出しが生成されま
す。
関数 vector_delete_ は 2 つの引数をとります。1 つ
目の引数は削除されるポインタで、2 つ目の引数は各配
列要素のサイズです。
関数 _vector_deletex_ は、3 つ目の引数をとります
が、それ以外 vector_delete と同じように動作しま
す。3 つ目の引数はクラスのデストラクタのアドレスで
す。この 3 つ目の引数は関数では使用されませんが、
サン以外のベンダー用に用意されています。
デフォルト:
-vdelx を指定しない場合、コンパイラは、 delete[]
を使用する式に対して、 _vector_delete_ への呼び出
しを生成します。
警告:
将来、廃止予定の旧式のオプションです。他社製のソフ
トウェアを導入しており、そのソフトウェアの提供元が
このオプションの使用を推奨しているのでない限りは、
使わないでください。
-verbose=a[,a...]
コンパイラの冗長性を制御します。
a には次のいずれかを指定します。
値 意味
[no%]template テンプレートをインスタンス化す
る冗長モード (検証モードとも言
います) をオンにします [しませ
ん]。冗長モードでは、コンパイ
ル中に行われるインスタンス化の
各段階が表示されます。
[no%]diags コンパイル段階ごとにコマンド行
に出力します [しません]。
[no%]version CC ドライバは、起動されるプロ
グラムの名前とバージョン番号を
出力します [しません]。
%all 上記のすべてを行います。
%none 上記のいずれも行いません。
デフォルト:
-verbose が指定されていない場合、コンパイラは
-verbose=%none を仮定します。
相互の関連性:
このオプションは上書きされずに累積されます。
+w 意図しない結果を生じる可能性のあるコードを識別しま
す。+w オプションは、関数が大きすぎてインライン化
できなかったり、宣言されたプログラム要素が使用され
ない場合は、警告を出力しなくなりました。これらの警
告は、ソース上の実際の問題を識別しないので、開発環
境によっては不適切でした。このような環境では、これ
らの警告を +w から削除することによって、より広範に
+w を使用できます。これらの警告は、+w2 オプション
で使用可能です。
o 移植性がない
o 誤りである可能性がある
o 効率が悪い
デフォルト:
+w を指定しない場合、コンパイラは、ほぼ間違いなく
誤りである構造についてのみ警告を出力します。
相互の関連性:
C++ 標準ヘッダーの中には、 +w 付きでコンパイルする
と警告を出力するものがあります。
+w2 +w で報告される警告に加えて、技術的な違反について
の警告を報告します。 +w2 で報告される警告は、危険
性はないが、プログラムの移植性を損なう可能性がある
ものです。
+w2 オプションは、システムヘッダーファイルにおける
実装依存構造の使用についての警告を出力しなくなりま
した。システムヘッダーファイルは実装なので、この警
告は不適切です。これらの警告を +w2 から削除するこ
とによって、より広範にこのオプションを使用できま
す。
警告:
Solaris ソフトウェアおよび C++ の標準ヘッダーファ
イルの中には、 +w2 を指定してコンパイルすると警告
を出力するものがあります。
-w 警告メッセージを抑止します。
このオプションにより、コンパイラから警告メッセージ
が出力されなくなります。ただし警告メッセージの中に
は、廃止された内容に対する警告など、抑止できないも
のもあります。
-Xm -features=iddollar を使ってください。
-xa プロファイル用のコードを生成します。
コンパイル時にこのオプションが設定された場合、カバ
レージ (.d) ファイルが存在するディレクトリは、
TCOVDIR 環境変数によって指定されます。この TCOVDIR
が設定されていない場合、カバレージ (.d) ファイルは
同じディレクトリにソースファイルとして残ります。
このオプションは、古いカバレージファイルとの下位互
換性のためだけに使用してください。プロファイルの新
しいスタイルについては、 -xprofile=tcov を参照して
ください。詳細は、 tcov(1) のマニュアルページと
『プログラムのパフォーマンス解析』を参照してくださ
い。
相互の関連性:
-xprofile=tcov と -a オプションは、単一の実行可能
ファイル内では互換性があります。つまり、
-xprofile=tcov でコンパイルしたファイルと -xa でコ
ンパイルしたファイルが混在するプログラムはリンクで
きます。両方のオプションを使用して単一のファイルを
コンパイルすることはできません。
-xa には、 -g との互換性はありません。
警告:
コンパイルとリンクを別の段階で行う場合、コンパイル
時には、リンクの段階で使用したものと同じ -xa オプ
ションを使用しなければなりません。そうしないと、予
想外の結果が生じることがまれにあります。
-xalias_level[= n]
コンパイラが、型に基づいた別名解析を実行します。
デフォルト:
n は any、simple、compatible のいずれかです。
o -xalias_level
-xalias_level を値なしで指定する場合、コンパイラ
により
-xalias_level=empty が設定されます。
o -xalias_level=any
この解析レベルでは、コンパイラはどの型も他の任意
の型の別名になるとみなします。ただし、このように
仮定しても、一部の最適化は可能です。
o -xalias_level=simple
コンパイラは、基本型は別名にならないとみなしま
す。特に、以下のいずれかの基本型の動的な型を持つ
記憶オブジェクトは、特定の型の lvalues からのみ
アクセスされます。
* char、signed char、および unsigned char
* wchar_t
* short int、unsigned short int
* int、unsigned int
* long int、unsigned long int
* long long int、unsigned long long int
* float、double、long double
* 列挙型
* データポインタ型
* 関数ポインタ型
* データメンバーポインタ型
* 関数メンバーポインタ型
この場合の lvalues の型は以下のとおりです。
* オブジェクトの動的な型
* オブジェクトの動的な型を
constant および volatile で修飾したもの
* オブジェクトの動的な型の
符号付き、または符号なしの型
* オブジェクトの動的な型を
constant および volatile で修飾したもの
符号付き、または符号なしの型
* 上記の型の 1 つをメンバーに含む
(副集合体または含まれる共用体
のメンバーを再帰的に含む) 集合
体型または共用体型
* 文字型または無符号文字型
o -xalias_level=compatible
コンパイラは、レイアウト非互換型は別名にならない
とみなします。記憶オブジェクトは以下の型の
lvalues からのみアクセスされます。
* オブジェクト型の動的な型
* オブジェクト型の動的な型を
constant および volatile で修飾したも
* オブジェクトの動的な型の
符号付き、または符号なしの型
* オブジェクトの動的な型を
constant および volatile で修飾したもの
符号付き、または符号なしの型
* 上記の型の 1 つをメンバーに含む
(副集合体または含まれる共用体の
メンバーを再帰的に含む) 集合体型
または共用体型
* 動的オブジェクト型の (場合によって
は定数またはvolatile修飾) 基本クラス型
* 文字型または無符号文字型
コンパイラは、すべての参照の型は、対応する動的記
憶オブジェクト型とレイアウト互換性があるとみなし
ます。2 つの型は、以下の条件でレイアウト互換型と
なります。
* 2 つの型が同じ型であれば、この
2 つは配置互換です。
* 2 つの型が constant および volatile修飾かの
点のみが異なる場合、この 2 つは
配置互換です。
* 符号付の整数型について、対応する
(ただし異なる) 符合なしの整数型が
存在する場合、これらの対応型は
配置互換です。
* 2 つの列挙型は、基本型が同じで
あれば配置互換です。
* 2 つの Plain Old Data (POD) 構造
体型は、メンバー数が同じで、対応
するメンバーが (順番に) 配置互換で
ある場合は、配置互換です。
* 2 つの POD 共用体型は、メンバー数
が同じで、対応するメンバーが (任意
の順序で) 配置互換である場合は、
配置互換型です。
参照は、動的記憶オブジェクト型とレイアウト非互換
になることがありますが、以下の状況に制限されま
す。
* POD 共用体が、共通の初期シーケンス
を共有する 2 つ以上の POD 構造体を
持ち、POD 共用体オブジェクトが現在
これらの POD 構造体の 1 つを含んで
いる場合、構造体の共通初期部分を調
べることができます。2 つの POD 構造
体は、対応するメンバーが配置互換で
あり、ビットフィールドが該当する場合は、
つまたは複数の初期メンバーの
シーケンスについて幅が同じであるとき、
共通初期シーケンスを共有します。
* POD 構造体オブジェクトへのポインタは、
reinterpret_cast を使用して適切に変換
され、初期メンバーを指します。そのメン
バーがビットフィールドの場合は、ビット
フィールドが属すユニットを指します。
相互の関連性:
コンパイラは、最適化レベル -x02 以下では型に基づく
別名解析を行いません。
-xar アーカイブライブラリを作成します。
テンプレートを使用する C++ のアーカイブをコンパイ
ルするときには通常、後でインスタンス化されてテンプ
レートリポジトリに入れられる可能性のあるテンプレー
ト関数をアーカイブの中にあらかじめ入れておく必要が
あります。このオプションは自動的にそれらのテンプ
レートを必要に応じてアーカイブに追加します。
値:
-xar を指定して ar -c-r を起動し、スクラッチから
アーカイブを作成します。
例:
次のように実行すると、ライブラリおよびオブジェクト
ファイルに含まれているテンプレート関数をアーカイブ
します。
example% CC -xar -o libmain.a a.o b.o c.o
警告:
コマンド行では、テンプレートリポジトリの .o ファイ
ルは追加しないでください。
アーカイブを作成するときに、 ar コマンドを直接使用
することはできません。 CC -xar を使用して、テンプ
レートのインスタンス化がアーカイブの中に自動的に取
り込まれるようにする必要があります。
関連項目:
ar(1)
-xarch=isa
ターゲットの命令セットアーキテクチャ(ISA) を指定し
ます。
このオプションは、コンパイラが生成するコードを、指
定した命令セットアーキテクチャの命令だけに制限しま
す。このオプションは、ターゲットに固有な命令の使用
を保証するものではありません。ただし、このオプショ
ンを使用すると、バイナリプログラムの移植性に影響が
生じることがあります。注と警告の部分も参照してくだ
さい。
コンパイルとリンクを別々の手順で行なう場合には、ど
ちらの手順でも同じ -xarch の値を指定するようにして
ください。
値:
SPARC プラットフォームの場合:
値 意味
generic ほとんどのシステムで良好なパフォーマンス
を得られるように 32 ビットオブジェクトバ
イナリを生成します。
これはデフォルトではなくなりました。新し
いデフォルトは -xarch=v8plus です。この
オプションは、どのプロセッサでも大きくパ
フォーマンスを落とさずに、ほとんどのプロ
セッサで良好なパフォーマンスを得るための
最良の命令セットを使用します。「最良な命
令セット」の定義は、(必要に応じて) リ
リースごとに調整される可能性があります。
-dryrun オプションを使用すると、このリ
リースに対する -xarch=generic の値を確認
できます。
generic64 ほとんどの 64 ビット対応プラットフォーム
で最高のパフォーマンスを得るために 64
ビットオブジェクトバイナリを生成します。
このオプションは、どのプロセッサでも大き
くパフォーマンスを落とさずに 64 ビット
カーネル Solaris オペレーティング環境で
良好なパフォーマンスを得るための最良の命
令セットを使用します。「最良な命令セッ
ト」の定義は、必要に応じてリリースごとに
調整される可能性があります。
native 当該システムで良好なパフォーマンスを得ら
れるように 32 ビットオブジェクトバイナリ
を生成します。
これは -fast オプションのデフォルトで
す。コンパイラは、プロセッサが実行してい
るシステムに適切な設定を選択します。
native64 当該システムで良好なパフォーマンスを得ら
れるように 64 ビットオブジェクトバイナリ
を生成します。
コンパイラは、プロセッサが実行している現
在のシステムに適切な設定を選択します。
v7 SPARC-V7 ISA 用にコンパイルします。(廃止
)
最新の Solaris オペレーティングシステム
は、SPARC V7 アーキテクチャをサポートし
ません。このオプションを付けてコンパイル
したプログラムは、最新のプラットフォーム
で実行速度が低下します。デフォルトは -
xarch=v8plus です。
例: SPARCstation 1、SPARCstation 2
v8a V8a バージョンの SPARC-V8 ISA 用にコンパ
イルします。
定義上、V8a は V8 ISA を意味します。ただ
し、fsmuld 命令は例外です。このオプショ
ンは、V8a 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 環境だけ
で実行できます。つまり、V8 プロセッサ上
では動作しません。
例: UltraSPARC チップアーキテクチャに基
づくシステム
v8plusb UltraSPARC-III 拡張付きで、V8plusb バー
ジョンの SPARC-V8 plus ISA 用にコンパイ
ルします。
UltraSPARC アーキテクチャ+ VIS (Visual
Instruction Set) バージョン 2.0 +
UltraSPARC-III 拡張用のオブジェクトコー
ドを生成します。結果のオブジェクトコード
は SPARC-V8 + ELF32 形式であり、Solaris
UltraSPARC-III 環境だけで実行できます。
このオプションは UltraSPARC-III アーキテ
クチャ上で良好なパフォーマンスを得るため
の最良のコードを使用します。
v9 SPARC-V9 ISA 用にコンパイルします。
V9 SPARC アーキテクチャ上で良好なパ
フォーマンスを得るためのコードを生成しま
す。結果の .o オブジェクトファイルは
ELF64 形式であり、同じ形式の SPARC-V9 オ
ブジェクトファイルだけとリンクできます。
結果の実行可能ファイルは、64 ビット有効
な Solaris オペレーティング環境が動作し
ており、64 ビットカーネルを持つ
UltraSPARC プロセッサ上だけで実行できま
す。
-xarch=v9 は、64 ビット有効な Solaris オ
ペレーティング環境でコンパイルするときだ
け使用できます。
v9a UltraSPARC 拡張付きの SPARC-V9 ISA 用に
コンパイルします。
SPARC-V9 ISA に VIS (Visual Instruction
Set) と UltraSPARC プロセッサに固有な拡
張を追加します。V9 SPARC アーキテクチャ
上で良好なパフォーマンスを得るためのコー
ドを生成します。結果の .o オブジェクト
ファイルは ELF64 形式であり、同じ形式の
SPARC-V9 オブジェクトファイルだけとリン
クできます。結果の実行可能ファイルは、64
ビット有効な Solaris オペレーティング環
境が動作しており、64 ビットカーネルを持
つ UltraSPARC プロセッサ上だけで実行でき
ます。
-xarch=v9a は、64 ビット有効な Solaris
オペレーティング環境でコンパイルするとき
だけ使用できます。
v9b UltraSPARC-III 拡張付きの SPARC-V9 ISA
用にコンパイルします。
V9a バージョンの SPARC-V9 ISA に
UltraSPARC-III 拡張と VIS バージョン 2.0
を追加します。Solaris UltraSPARC-III 環
境で良好なパフォーマンスを得るためのコー
ドを生成します。結果の .o オブジェクト
ファイルは SPARC-V9 ELF64 形式であり、同
じ形式の SPARC-V9 オブジェクトファイルだ
けとリンクできます。結果の実行可能ファイ
ルは、64 ビット有効な Solaris オペレー
ティング環境が動作しており、64 ビット
カーネルを持つ UltraSPARC-III プロセッサ
上だけで実行できます。
-xarch=v9b は、64 ビット有効な Solaris
オペレーティング環境でコンパイルするとき
だけ使用できます。
また、次のことにも注意してください。
o SPARC 命令セットアーキテクチャ、V8 および V8a は
バイナリ互換です。
o v8plus と v8plusa でコンパイルしたオブジェクトバ
イナリファイル (.o) は、SPARC V8plusa 互換プラッ
トフォーム上でのみ、一緒にリンクおよび実行できま
す。
o v8plus、 v8plusa、 および v8plusb でコンパイルし
たオブジェクトバイナリファイル (.o) は、SPARC
V8plusb 互換プラットフォーム上でのみ、一緒にリン
クおよび実行できます。
o -xarch には、UltraSPARC 64 ビット対応 Solaris オ
ペレーティング環境でのみ、 generic64、
native64、 v9、v9a、 および v9b の値を指定できま
す。
o v9 と v9a でコンパイルしたオブジェクトバイナリ
ファイル (.o) は、SPARC V9a 互換プラットフォーム
上でのみ、一緒にリンクおよび実行できます。
o generic64、 native64、 v9、 v9a、および v9b でコ
ンパイルしたオブジェクトバイナリファイル (.o)
は、SPARC V9b 互換プラットフォーム上でのみ、一緒
にリンクおよび実行できます。
どの場合でも、アーキテクチャが古くなるほど、生成さ
れた実行可能ファイルの実行速度が遅くなる可能性があ
ります。また、初期の多くの命令セットアーキテクチャ
で 4 倍精度 (REAL*16 と long double) の浮動小数点
命令を使用できますが、コード内ではこれらの命令を使
用しません。
IA プラットフォームの場合:
値 意味
generic ほとんどのシステムで良好なパフォー
マンスを得られるようにコンパイルし
ます。
これはデフォルトです。このオプショ
ンは、どのプロセッサでも大きくパ
フォーマンスを落とさずに、ほとんど
のプロセッサで良好なパフォーマンス
を得るための最良の命令セットを使用
します。新しいリリースごとに、「最
良な命令セット」の定義を調節する必
要があるかもしれません。
386 このリリースでは、generic と 386 は
同じです。
pentium_pro Intel Pentium Pro チップ用にコンパ
イルします。
sse pentium_pro アーキテクチャに SSE 命
令セットを追加します。
sse2 pentium_pro アーキテクチャに SSE2
命令セットを追加します。
注意:
Solaris x86 SSE/SSE2 Pentium 4 互換
プラットフォームで動作するよう
-xarch={sse| sse2} を使ってコンパイ
ルしたプログラムは、SSE/SSE2 対応の
プラットフォームでのみ実行する必要
があります。SSE/SSE2 に対応していな
いプラットフォームでそうしたプログ
ラムを実行すると、セグメント例外が
発生したり、明示的な警告メッセージ
なしに不正な結果が発生したりするこ
とがあります。
SSE/SSE2 でコンパイルされたバイナリ
が SSE/SSE2 に対応していないプラッ
トフォームで実行されることのないよ
うにするための OS およびコンパイラ
に対するパッチが、後日提供される可
能性があります。
Pentium 4 互換プラットフォームの場
合、Solaris 9 update 6 以降の OS リ
リースは SSE/SSE2 に対応していま
す。これより前のバージョンの
Solaris OS は SSE/SSE2 に対応してい
ません。このことは、.il インライン
アセンブリ言語関数を使用しているプ
ログラムや、SSE/SSE2 命令を利用して
いる __asm() アセンブラコードにも当
てはまります。
コンパイルとリンクを別々に行う場合
は、必ずコンパイラを使ってリンク
し、-xarch={sse| sse2} で適切な起動
ルーチンがリンクされるようにしてく
ださい。
新しい sse および sse2 フラグの働きについての詳細
は、このマニュアルページ先頭の「x86 版での
-xarch、-xtarget、および -xchip のフラグの追加」を
参照してください。
-xarch=isa を指定しない場合、 -xarch=generic が仮
定されます。
相互の関連性:
このオプションは単体でも使用できますが、 -xtarget
オプションの展開の一部でもあります。したがって、特
定の -xtarget オプションによって設定された -xarch
の値を変更するためにも使用できます。たとえば、
-xtarget=ultra2 は -xarch=v8 -xchip=ultra2
-xcache=16/32/1:512/64/1 に展開されます。次のコマ
ンドでは、 -xarch=v8plusb は、-xtarget=ultra2 の展
開で設定された -xarch=v8 を変更します。
example% CC -xtarget=ultra2 -xarch=v8plusb ...
-xarch=v9、 -xarch=v9a、または -xarch=v9b オプショ
ンは -compat[=4] オプションとは併用できません。
警告:
このオプションを最適化と一緒に使用するとき、適切な
選択をした場合、指定されたアーキテクチャ上で実行可
能ファイルの良好なパフォーマンスを得ることができま
す。しかし、適切な選択をしなかった場合、パフォーマ
ンスが著しく低下するか、あるいは、作成されたバイナ
リプログラムが目的のターゲットプラットフォーム上で
実行できない可能性があります。
-xautopar (SPARC) マルチプロセッサに対する自動並列化を有効に
します。ループの依存関係の解析 (反復データの相互依
存関係に関するループの解析) と再構成を行います。最
適化レベルが -xO3 より低い場合は、-xO3 の最適化レ
ベルに上げられて、警告が発行されます。
独自のスレッド管理をしている場合は -xautopar を使
わないでください。
実行を高速化するには、マルチプロセッサシステムが必
要です。シングルプロセッサシステムの場合は、通常、
生成されたバイナリの実行速度は低下します。
実際のプロセッサを調べるには、psrinfo コマンドを使
用します。
複数のプロセッサを要求するには、PARALLEL 環境変数
を設定します。デフォルトは 1 です。
o 使用可能数を超えるプロセッサを要求しないでくださ
い。
o 1 ユーザーのマルチプロセッサシステムの場合、プロ
セッサ数が N の場合は、PARALLEL=N-1 を試してくだ
さい。
-xautopar を使用し、1 回のステップでコンパイルとリ
ンクを行うと、リンクで、マイクロタスクライブラリと
スレッドセーフな C の実行時ライブラリが取り込まれ
ます。-xautopar を使用して、コンパイルとリンクを
別々のステップで行う場合は、CC -xautopar も付けて
リンクする必要があります。
-xbuiltin[={%all|%none}]
標準ライブラリ呼び出しの最適化を有効にしたり無効に
したりします。
デフォルトでは、標準ライブラリのヘッダーで宣言され
た関数はコンパイラにより通常の関数として扱われま
す。しかし、いくつかの関数はコンパイラにより、組み
込みとして認識することができます。組み込みとして扱
われた場合、コンパイラはより効果的なコードを生成で
きます。例えば、コンパイラは、いくつかの関数には副
作用がないと認識でき、常に同じ入力から同じ出力を戻
します。コンパイラにより直接インラインに生成される
関数もあります。オブジェクトファイル内のコンパイラ
のコメントを読み取って、コンパイラが実際に置換を行
う関数を決定する方法については、er_src(1) のマニュ
アルページを参照してください。
-xbuiltin=%all はコンパイラにできるだけ多くの組み
込み標準関数を認識させようとします。認識された関数
の正確なリストは、コンパイラコードジェネレータの
バージョンにより変化します。
-xbuiltin=%none はデフォルトの動作です。
デフォルト:
-xbuiltin オプションが指定されていない場合、コンパ
イラは -xbuiltin=%none を想定します。 -xbuiltin の
みが指定されている場合は、コンパイラは
-xbuiltin=%all を想定します。
-xcache=c (SPARC プラットフォーム) オプティマイザが使用でき
るキャッシュの属性を定義します。
このオプションによって、特定のキャッシュ属性が使用
されるわけではありません。
このオプションは単独でも使用できますが、
-xtarget オプションを展開したものの一部です。主
に、 -xtarget オプションで指定された値を無効にする
(変更する) 場合に使用します。
c には、以下のいずれかを指定します。
o generic
o native
o s1/l1/a1
o s1/l1/a1:s2/l2/a2
o s1/l1/a1:s2/l2/a2:s3/l3/a3
つまり、
-xcache={generic | s1/l1/a1[:s2/l2/a2[:s3/l3/a3]]}
のように指定します。si/li/ai は、次のように定義さ
れています。
si レベル i のデータキャッシュのサイズ (キロバイ
ト)
li レベル i のデータキャッシュの行サイズ (バイト
)
ai レベル i のデータキャッシュの結合規則
たとえば、 i=1 により、レベル 1 のキャッシュ属性、
s1/l1/a1 が指定されます。
以下に -xcache の値を示します。
値 意味
generic ほとんどの SPARC プロセッサ上で良好
なパフォーマンスが得られるキャッ
シュ属性を定義します。
ほとんどの SPARC 上で良好なパフォー
マンスが得られ、どのプロセッサ上で
もパフォーマンスが低下することがな
いような、キャッシュ属性を使用する
ようにコンパイラに指示する、デフォ
ルトの値です。
native ホストの環境で最高のパフォーマンス
を得るためのパラメータを設定しま
す。
s1/l1/a1 レベル 1 のキャッシュ属性を定義し
ます。
s1/l1/a1:s2/l2/a2
レベル 1 とレベル 2 のキャッシュ属
性を定義します。
s1/l1/a1:s2/l2/a2:s3/l3/a3
レベル 1、レベル 2、レベル 3 の
キャッシュ属性を定義します。
たとえば、-xcache=16/32/4:1024/32/1 の設定内容は次
のとおりです。
レベル 1: レベル 2:
16K バイト 1024K バイト
ラインサイズ 32 バイト
ラインサイズ 32 バイト
4 ウェイアソシアティブ
ダイレクトマッピング
-xcg89 このオプションの使用は推奨しません。最新の Solaris
オペレーティングシステムはもう SPARC V7 アーキテク
チャをサポートしていません。このオプションを付けて
コンパイルすると、最新の SPARC プラットフォームで
は実行速度が低下するコードが生成されます。
-xtarget=ss2 と同じです。
警告:
単独のステップでコンパイルおよびリンクを行い、
-xcg89 でコンパイルした場合、同じオプションでリン
クすることに留意してください。さもないと、予期しな
い結果になる可能性があります。
-xcg92 -xtarget=ss1000 と同じです。
警告:
単独のステップでコンパイルおよびリンクを行い、
-xcg92 でコンパイルした場合、同じオプションでリン
クすることに留意してください。さもないと、予期しな
い結果になる可能性があります。
-xchar=o このオプションは、文字型が符号なしとして定義されて
いるシステムからのコードを容易に移植できるようにす
るためだけに提供されています。こうしたシステムから
移植するのでなければ、このオプションは使用しないで
ください。文字型の符号に依存するコードだけが、明示
的に符号付き、符号なしを指定して書き直される必要が
あります。
値:
o は次のいずれか 1 つで置き換えることができます。
o signed: 文字定数および変数を、符号付きとして宣言
されているものとして取り扱います。このことでコン
パイルされたコードの動きに影響が生じますが、ライ
ブラリルーチンの動きには影響ありません。
o s: signed と同じです。
o unsigned: 文字定数および変数を、符号なしとして宣
言されているものとして取り扱います。このことでコ
ンパイルされたコードの動きに影響が生じますが、ラ
イブラリルーチンの動きには影響ありません。
o u: unsigned と同じです。
デフォルト:
-xchar を指定しない場合、コンパイラは -xchar=s と
仮定します。-xchar を指定して、値は指定しなかった
場合、コンパイラは -xchar=s と仮定します。
相互の関連性:
-xchar オプションは、-xchar を使ってコンパイルされ
たコードだけのために型文字の値の範囲を変更します。
このオプションは、どのシステムルーチン、ヘッダー
ファイルでもその中の型文字の値の範囲は変更しませ
ん。とくに limits.h で定義される CHAR_MAX、
CHAR_MINI の値はこのオプションが指定されていても変
わりません。このため、CHAR_MAX と CHAR_MIN は、
char で符号化できる値の範囲を表さなくなります。
警告:
-xchar を使用する場合、事前定義されたシステムマク
ロに対する char の比較には、特に注意してください。
マクロの値には符号付きのものもあるからです。これ
は、マクロを通してアクセスされるエラーコードを返す
どのルーチンにもほとんど共通なことです。エラーコー
ドはふつう負の値なので、こうしたマクロの値と char
とを比較すると、結果は常に偽です。負の数が符号なし
型の値と等しくなることは決してありません。
ライブラリを介してエクスポートされるどのインタ
フェースについても、 -xchar を使ってルーチンをコン
パイルすることは、絶対にやめてください。Solaris
ABI では char 型を符号付きと指定しており、それに
従ってシステムライブラリが動作します。char 型を符
号なしとして扱う場合のシステムライブラリへの影響は
幅広くテストされてはいません。このオプションを使用
する代わりに、コード自体を変更して、char 型が符号
付きであるか符合なしであるかに依存しないようにして
ください。char 型の符号は、コンパイラやオペレー
ティングシステムによって異なります。
-xcheck[=n]
(SPARC プラットフォーム) スタックオーバーフローの
実行時チェックを行います。
値:
n は以下のいずれかの値です。
値 意味
%all すべてのチェックを実行します。
%none チェックを行いません。
stkovf 単一スレッドプログラムにはメインス
レッドのスタックオーバーフローの実
行時チェックを、マルチスレッドプロ
グラムにはスレーブスレッドのスタッ
クオーバーフローの実行時チェックを
行います。スタックオーバーフローが
検出されると、SIGSEGV 障害が発生し
ます。アプリケーションが、スタック
オーバーフローが原因で発生した SIG-
SEGV を他のアドレス空間違反の処理と
は異なる方法で処理する必要がある場
合は、sigaltstack(2) を参照してくだ
さい。
no%stkovf スタックオーバーフローチェックを無
効にします。
相互の関連性:
-xcheck を引数なしで指定すると、コンパイラはデフォ
ルトで -xcheck=%none を設定します。
-xchip=c オプティマイザを使用するターゲットとなるプロセッサ
を指定します。
このオプションは単独でも使用できますが、 -xtarget
オプションを展開したものの一部です。主に、 -xtar-
get オプションで指定された値を無効にする (変更する
) 場合に使用します。
ターゲットとなるプロセッサを指定することによって、
タイミング属性を指定します。
このオプションは、次の内容に影響を与えます。
o 命令の順番 (スケジューリング)
o コンパイラが分岐を使用する方法
o 意味が同等のもので代用できる場合に使用する命令
以下に SPARC プラットフォームに適用される -xchip
の値を示します。
値 意味
generic SPARC プロセッサ上で良好なパフォーマンス
を得るための、タイミング属性を使用しま
す。
ほとんどの SPARC 上で良好なパフォーマン
スが得られ、どのプロセッサ上でもパフォー
マンスが低下することがないような、タイミ
ング属性を使用するようにコンパイラに指示
する、デフォルトの値です。
native ホストの環境で最高のパフォーマンスを得る
ためのパラメータを設定します。
super SuperSPARC プロセッサのタイミング属性を
使用します。
super2 SuperSPARC II プロセッサのタイミング属性
を使用します。
micro MicroSPARC (TM) プロセッサのタイミング属
性を使用します。
micro2 MicroSPARC II プロセッサのタイミング属性
を使用します。
hyper HyperSPARC (TM) プロセッサのタイミング属
性を使用します。
hyper2 HyperSPARC II プロセッサのタイミング属性
を使用します。
ultra UltraSPARC プロセッサのタイミング属性を
使用します。
ultra2 UltraSPARC II プロセッサのタイミング属性
を使用します。
ultra2e UltraSPARC IIe プロセッサのタイミング属
性を使用します。
ultra2i UltraSPARC IIi プロセッサのタイミング属
性を使用します。
ultra3 UltraSPARC III プロセッサのタイミング属
性を使用します。 ultra3i UltraSPARC IIIi
プロセッサのタイミング属性を使用します。
ultra4
UltraSPARC IV プロセッサのタイミング属性を使用し
ます。
IA プラットフォーム用の -xchip の値:
値 意味
generic ほとんどの IA プロセッサ上で良好なパ
フォーマンスを得るためのタイミング属性を
使用します。
386 Intel 386 プロセッサのタイミング属性を使
用します。
486 Intel 486 プロセッサのタイミング属性を使
用します。
pentium Intel Pentium プロセッサのタイミング属性
を使用します。
pentium_pro
Intel Pentium Pro プロセッサのタイミング
属性を使用します。
pentium3 Pentium 3 型のプロセッサのタイミング属性
を使用します。
pentium4 Pentium 4 型のプロセッサのタイミング属性
を使用します。
新しい pentium3 および pentium4 フラグの働きについ
ての詳細は、このマニュアルページ先頭の「x86 版での
-xarch、-xtarget、および -xchip のフラグの追加」を
参照してください。
-xcode=a (SPARC プラットフォーム) コードアドレス空間を指定
します。
注: 共用オブジェクトを構築するには -xcode=pic13 ま
たは -xcode=pic32 を指定することを強く推奨します。
-xarch=v9 -xcode=abs64、および -xarch=v8
-xcode=abs32 で使用可能な共用オブジェクトを構築す
ることは可能ですが、効率的ではありません。
-xarch=v9 -xcode=abs32 または -xarch=v9
-xcode=abs44 を使用して構築された共用オブジェクト
は動作しません。
次の表に、 -xcode の値を示します。
値 意味
abs32 高速で範囲の限定された 32 ビット絶対アド
レスを生成します。コード、データ、bss を
合計したサイズは 2**32 (2 の 32 乗) バイ
トに制限されます。これは 32 ビットアーキ
テクチャでのデフォルトです: -
xarch=(generic|v8|v8a|8plus|v8plusa|v8plusb)
abs44 SPARC: 適度な速度と範囲の 44 ビット絶対
アドレスを生成します。コード、データ、
bss を合計したサイズは 2**44 バイトに制
限されます。これは、-xarch=v9 あるいは
-xarch=v9b などの 64 ビットアーキテク
チャでのデフォルトです。動的 (共有) ライ
ブラリには、このオプションは使わないでく
ださい。
abs64 SPARC: 低速で範囲の限定されない 64 ビッ
ト絶対アドレスを生成します。64 ビット
アーキテクチャ( -xarch={v9|v9a| v9b}) だ
けで利用できます。
pic13 高速で範囲の限定された位置独立コード (小
規模モデル) を生成します。 -Kpic と同義
です。32 ビットアーキテクチャでは最大
2**11 まで、64 ビットアーキテクチャでは
最大 2**10 までの固有の外部シンボルを参
照できます。
pic32 低速で範囲の限定されない位置独立コード (
大規模モデル) を生成します。 -KPIC と同
義です。32 ビットアーキテクチャでは最大
2**30 まで、64 ビットアーキテクチャでは
最大 2**29 までの固有の外部シンボルを参
照できます。
-xcode=pic13 または -xcode=pic32 のどちらを使用す
るか決定する際は、elfdump -c (詳細は elfdump(1) の
マニュアルページを参照) を使って大域オフセットテー
ブル Table (GOT) のサイズを調べ、セクション見出し
sh_name: .got を確認します。sh_size 値は GOT のサ
イズです。GOT が 8,192 バイトに満たない場合は
-xcode=pic13、そうでない場合は -xcode=pic32 を指定
します。
一般に、-xcode の使用方法を決める際は、次の指針に
従います。
o 実行可能ファイルを構築する場合は、 -xcode=pic13
と-xcode=pic32 のどちらも使わない。
o 実行可能ファイルへのリンク専用のアーカイブライ
ブラリを構築する場合は、 -xcode=pic13 と
-xcode=pic32 のどちらも使わない。
o 共有ライブラリを構築する場合は、まず
-xcode=pic13 を使い、GOT サイズが 8,192 バイトを超
えたら、-xcode=pic32 を使う。
o 共有ライブラリへのリンク用のアーカイブライブラ
リを構築する場合は、 -xcode=pic32 だけ使う。
デフォルト:
SPARC V8 プロセッサでは、デフォルトは -xcode=abs32
です。
SPARC V9 と UltraSPARC V9 プロセッサ (
-xarch={v9|v9a|v9b}) ) では、デフォルトは
-xcode=abs44 です。
警告:
単独のステップでコンパイルおよびリンクを行った場
合、コンパイルステップとリンクステップと同じ
-xarch オプションを使用する必要があります。
-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.cc と
f3.cc 間、または f4.cc 間では、最適化は行われませ
ん。
値:
n には、次のいずれかの値を指定します。
値 意味
0 ソースファイル間の最適化とインライ
ン化を実行しません。
1 ソースファイル間の最適化とインライ
ン化を実行します。
通常、コンパイラの解析の範囲は、コマンド行上の各
ファイルに制限されます。たとえば、 -xO4 オプション
を指定した場合、自動インライン化は同じソースファイ
ル内で定義および参照されるサブプログラムに制限され
ます。 -xcrossfile または -xcrossfile=1 を指定した
場合、コマンド行上のすべてのファイルが単一のソース
ファイルに連結されたかのように解析されます。
ただし、-S オプションを指定することによってアセン
ブリのソースを生成するようコンパイラに指示している
場合、このオプションは何の働きもしません。アセンブ
リ (.s) ファイルは、ソースファイルにまたがる最適化
およびインライン化に関係しません。
デフォルト:
-xcrossfile を指定しない場合、 -xcrossfile=0 が仮
定され、ソースファイル間の最適化とインライン化は実
行されません。 -xcrossfile は -xcrossfile=1 と同義
です。
相互の関連性:
-xcrossfile オプションは、 -xO4 または -xO5と一緒
に使用したときだけ有効です。
警告:
インライン化の可能性があるため、このコンパイルから
生成されたファイルは相互に依存します。したがって、
プログラムにリンクするときは、1 つのユニットとして
使用する必要があります。あるルーチンを変更し、ファ
イルを再コンパイルする場合、すべてのファイルを再コ
ンパイルする必要があります。結果として、このオプ
ションを使用すると、makefile の構造に影響を与えま
す。
関連項目:
-xldscope
-xdepend[=[yes|no] ]
(SPARC) 反復データの相互依存関係に関するループの解
析をして、ループを再構成します。
ループの再構成では、ループ相互交換、ループ融合、ス
カラー置換、「使用されていない」配列割り当ての削除
などが行われます。最適化レベルが -xO3 より低い場合
は、-xO3 の最適化レベルに上げられて、警告が発行さ
れます。
-xdepend が指定されなかった場合のデフォルトは
-xdepend=no で、これは、データの依存関係に関する
ループの解析をコンパイラが行わないことを意味しま
す。 -xdepend が引数なしで指定された場合、コンパイ
ラはこのオプションを -xdepend=yes に設定し、これ
は、コンパイラがデータの依存関係に関するループの解
析を行うことを意味します。
-xautopar には、依存関係の解析が含まれ、この解析
は、コンパイル時に行われます。
依存関係の解析は、シングルプロセッサシステムで役立
つことがあります。ただし、シングルプロセッサシステ
ムで -xdepend を試す場合は、 -xautopar と併用しな
いでください。併用すると、マルチプロセッサシステム
用の -xdepend 最適化が行われます。
関連項目: -xprefetch_auto_type
-xdumpmacros[=value[,value...]]
プログラム中でのマクロの動きを確認したい場合に、こ
のオプションを使用します。定義済みマクロ、解除済み
マクロ、実際の使用状況といった情報が得られます。結
果は、マクロの処理順に基づいて標準エラー(stderr)
に出力されます。 -xdumpmacros オプションは、ファイ
ルの終わりまで、あるいは dumpmacros か
end_dumpmacrosoption のプラグマによって上書きされ
るまで、有効です。
値:
値 意味
[no%]defs すべての定義済みマクロを出力します[
しません]。
[no%]undefs すべての解除済みマクロを出力します[
しません]
[no%]use 使用されているマクロの情報を出力し
ます[しません]
[no%]loc 定義済み、解除済みのもの、使用され
ているものについて、場所 (パス名と
行番号) を出力します
[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 と同じことになります。
注: サブオプション loc、conds、sys は defs、
undefs、use の各オプションの修飾子と同じです。
loc、conds、sys はそれだけでは効果はありません。た
とえば、 -xdumpmacros=loc,conds,sys には効果はあり
ません。
デフォルト:
引数を付けずに -xdumpmacros を指定すると、それは
-xdumpmacros=defs,undefs,sys という意味になりま
す。 -xdumpmacros を指定しない場合、デフォルトは
-xdumpmacros=%none となります。
-xe 構文と意味のエラーだけをチェックします。 -xe と指
定すると、コンパイラはオブジェクトコードを作成しま
せん。 -xe の出力は、直接 stderr ファイルに送られ
ます。
コンパイルで作成されるオブジェクトファイルが必要で
ない場合は、 -xe オプションを使用します。たとえ
ば、コードの部分部分を削除しながらエラーメッセージ
の原因を特定しようとしている場合、-xe を使えば編集
とコンパイルのサイクルをより早くできます。
-xF -xF オプションは、リンカーによる関数と変数の最適な
順序の並べ替えを有効にします。
このオプションは、コンパイラに対して関数、データ変
数を細分化された別々のセクションに配置するよう指示
し、それによってリンカーが、リンカーの -M オプショ
ンで指定されたマップファイル内の指示を使って、プロ
グラムのパフォーマンスが最適化されるようにこれらの
セクションを整理します。一般にこの最適化は、ページ
フォルト時間がプログラム実行時間の大半を占める場合
にのみ効果があります。
最適なパフォーマンスを目指す関数および変数の整理に
は、以下の操作が必要です。
1. -xF でコンパイル、リンクします。
2. 関数のマップファイルの生成に関する『プログラム
のパフォーマンス解析』マニュアルの指示に従って、ま
たデータのマップファイルの生成に関する『リンカーと
ライブラリ』の指示に従います。
3. -M オプションを使用して新しいマップファイルで再
リンクします。
4. アナライザの下で再度実行して、改善を確認しま
す。
値:
v は次のいずれかの値になります。
値 意味
[no%]func 関数を別々のセクションに細分化しま
す[しません]。
[no%]gbldata 大域的なデータ (外部リンケージのあ
る変数) を別々のセクションに細分化
します[しません]。
[no%]lcldata 局所データ (内部リンケージのある変
数) を別々のセクションに細分化しま
す[しません]。
%all 関数、大域的なデータ、局所データを
断片化します。
%none 何も断片化しません。
デフォルト:
-xF を指定しないと、デフォルトは -xF=%none となり
ます。引数を伴わないで -xF を指定した場合、デフォ
ルトは -xF=%none,func となります。
相互の関連性:
-xF=lcldata を使用すると、一部のアドレス計算の最適
化が禁止されるので、このフラグは実験結果が妥当であ
る場合にのみ使用するようにしてください。
関連項目:
analyzer(1)、 debugger(1)、 ld(1)
-xhelp=flags
各コンパイラのフラグについて簡単な説明を表示しま
す。
-xhelp=readme
README オンラインファイルの内容を表示します。
README ファイルのページングには、環境変数 PAGER で
指定されているコマンドが使用されます。 PAGER が設
定されていない場合、デフォルトのページングコマンド
more が使用されます。
-xia (SPARC プラットフォーム) 適切な区間演算ライブラリ
とリンクして、必要な浮動小数点環境を設定します。
-xia オプションは、以下のように展開されるマクロで
す。
-fsimple=0 -ftrap=%none -fns=no -library=interval
相互の関連性:
区間演算ライブラリを使用するには、 <suninterval.h>
をインクルードしてください。
区間演算ライブラリを使用する場合は、 libC、 Cstd、
iostreams のいずれかのライブラリが必要です。上記の
ライブラリを組み込む方法については、 -library オプ
ションの説明を参照してください。
警告:
区間演算を使用する場合、 -fsimple、 -ftrap、 -fns
のいずれかに、それとは異なる値を指定すると、プログ
ラムが誤った動作をすることがあります。
C++ 区間演算は実験的で発展途上にある機能です。その
ため、個々の内容はリリースごとに変化する可能性があ
ります。
関連項目:
『C++IntervalArithmeticProgrammingReference』、
『Interval Arithmetic Solves Nonlinear Problems
While Providing Guaranteed Results』
(http://www.sun.com/software/sundev/news/features/intervals.html),
-library
-xildoff インクリメンタルリンカーを使用しません。
-g オプションを使用しない場合は、このオプションが
仮定されます。また、 -G オプションを使用している
か、コマンド行にソースファイルの名前を指定している
場合も、このオプションが仮定されます。
-xildon オプションを使用すると、 -xildoff オプショ
ンは無効になります。
-xildon インクリメンタルリンカーを起動します。 -g オプショ
ンを使用し、 -G オプションを使用せず、かつ、コマン
ド行にソースファイルの名前を指定しない場合は、この
オプションがデフォルトです。このデフォルトを使用し
たくない場合は、 -xildoff オプションを指定してくだ
さい。
-xinline[=func_spec[,func_spec...]]
-xO3 またはそれ以上で、ユーザーが記述したルーチン
の中でオプティマイザによりインライン化できるものを
指定します。
値:
func_spec は次のいずれかの値です。
値 意味
%auto 最適化レベル -xO4 またはそれ以
上において自動インライン化を有
効にします。この引数はオプティ
マイザに対し、選択した関数をイ
ンライン化できることを通達しま
す。%auto を指定しないと、
-xinline=[no%]func_name により
コマンド行に明示的インライン化
が指定された場合に、通常は自動
インライン化が無効になることに
注意してください。
func_name オプティマイザによる関数のイン
ライン化を強く必要とします。関
数が、外部関数 "C" として宣言
されていない場合、func_name の
値は符号化する必要があります。
実行可能ファイルの nm コマンド
を使用して、符号化された関数名
を検索することができます。外部
関数 "C" として宣言された関数
名は、コンパイラにより符号化さ
れません。
no%func_name リストのルーチン名の前に no%
をつけると、そのルーチンのイン
ライン化は抑止されます。
func_name に対する符号化名に関
する規則は、同様に
no%func_name に適用されます。
コンパイルされたファイルのルーチンのみが、
-xcrossfile[=1] を使用していない限り、インライン化
されたものと考えられます。オプティマイザは、これら
のルーチンの中でインライン化に適切なものを決定しま
す。
デフォルト:
-xinline オプションが指定されていない場合、コンパ
イラは -xinline=%auto を仮定します。 -xinline= が
引数なしで指定された場合、最適化レベルに関わらず、
関数はインライン化されません。
例:
int foo() で宣言された関数のインライン化を無効にす
る際に、自動インライン化を有効にします。
example% CC -xO5 -xinline=%auto,no%__1cDfoo6F_i_
-c a.cc を使用してください。
int foo() として宣言された関数のインライン化を強く
必要とし、その他のすべての関数をインライン化の候補
にするため、
example% CC -xO5 -xinline=%auto, __1cDfoo6F_i_ -c
a.cc を使用してください。
int foo() として宣言される関数のインライン化を強く
必要とし、その他の関数のインライン化を許可しないた
めに、
example% CC -xO5 -xinline=__1cDfoo6F_i_ -c a.cc を
使用してください。
相互の関連性:
-xinline オプションは -xO3 の下の最適化レベルには
影響しません。 -xO4 およびそれ以上では、オプティマ
イザはインライン化が必要な関数を決定します。-xin-
line が指定されていない場合も同様です。-xO4 または
それ以上では、コンパイラは、インライン化されている
場合にパフォーマンスを改善する関数を決定しようとし
ます。
以下の条件のいずれかが適用される場合は、ルーチンは
インライン化されません。警告は省略されません。
o 最適化は -xO3 以下です。
o ルーチンが見つかりません。
o インライン化は有益または安全ではありませ
ん。
o コンパイルされたファイルにソースが存在しま
せん。または、-xcrossfile[=1] を使用した場
合、コマンド行で指定されたファイルにソース
が存在しません。
警告:
-xinline で関数のインライン化を行った場合、実
際にパフォーマンスが悪くなる可能性がありま
す。
関連項目:
-xldscope
-xipo[={0|1|2}]
(SPARC) 内部手続き最適化を実行します。
-xipo オプションは内部手続き解析を起動してプログラ
ム全体の最適化を実行します。 -xcrossfile とは異な
り、-xipo はリンクの段階ですべてのオブジェクトファ
イルに最適化を行います。最適化はコンパイルコマンド
が対象とするソースファイルのみに限定されません。た
だし、-xcrossfile と同様、-xipo で行われるプログラ
ム全体の最適化には、アセンブラ (.s) ソースファイル
は含まれません。
-xipo オプションは大規模な複数ファイルのアプリケー
ションをコンパイルおよびリンクする際に特に有効で
す。このフラグでコンパイルされたオブジェクトファイ
ルには、コンパイル時に生成された解析情報が含まれて
おり、これによって、ソースおよび事前コンパイルされ
たプログラムファイルの内部手続き解析ができるように
なります。ただし、解析と最適化は -xipo でコンパイ
ルされたオブジェクトファイルに限定され、ライブラリ
のオブジェクトファイルには拡張できません。
値:
値 意味
0 内部手続き最適化を実行しません。
1 内部手続き最適化を実行します。
2 内部手続き別名解析と、記憶域割り当
ておよびレイアウトの最適化を実行し
て、キャッシュを改善します。
デフォルト:
-xipo が指定されない場合、-xipo=0 が仮定されます。
-xipo が指定される場合、-xipo=1 が仮定されます。
例:
以下の例では同じ行でコンパイルとリンクを行っていま
す。
example% CC -xipo -xO4 -o prog part1.cc part2.cc
part3.cc
オプティマイザは 3 つのすべてのソースファイルの、
ファイルをまたいだインライン化を実行します。これは
リンクの最終段階で実行されるので、ソースファイルの
コンパイルを単一のコマンドで行う必要はありません。
-xipo オプションが指定された別々のコマンドでコンパ
イルすることもできます。
以下の例ではコンパイルとリンクを別々のステップで実
行しています。
example% CC -xipo -xO4 -c part1.cc part2.cc
example% CC -xipo -xO4 -c part3.cc
example% CC -xipo -xO4 -o prog part1.o part2.o
part3.o
コンパイル段階で生成されたオブジェクトファイルに
は、コンパイル時に生成された追加の解析情報が含まれ
ます。これによって、リンク段階でファイルをまたいだ
最適が行われるようになります。
相互の関連性:
-xipo オプションは少なくとも最適化レベル -xO4 を必
要とします。同じコンパイル行で -xipo オプションお
よび -xcrossfile オプション両方を使用できません。
警告:
コンパイルおよびリンクが別々のステップで行う際に
は、両方のステップで -xipo を指定する必要がありま
す。-xipo を指定しないでコンパイルしたオブジェクト
は、-xipo でコンパイルしたオブジェクトに自由にリン
クできます。以下の例で示すように -xipo でコンパイ
ルされた場合でも、ライブラリは、ファイルをまたいだ
内部手続き解析の対象とはなりません。
example% CC -xipo -xO4 one.cc two.cc three.cc
example% CC -xar -o mylib.a one.o two.o three.o
example% CC -xipo -xO4 -o myprog main.cc four.cc
mylib.a
この例では、内部手続き最適化は one.cc、two.cc と
three.cc の間、および main.cc と four.cc の間で行
われ、main.cc あるいは four.cc と mylib.a のルーチ
ンの間では行われません。最初のコンパイルで未定義シ
ンボルに関する警告が生成されますが、内部手続き最適
化は、コンパイルとリンクの両方の段階で行われるた
め、正常に実行されます。
-xipo オプションは、ファイルの最適化を実行するため
に必要な追加情報により、かなり大規模なオブジェクト
ファイルを生成します。しかし、この追加情報は最後の
実行可能バイナリファイルの一部にはなりません。実行
可能プログラムの大きさの増加分は、追加された最適化
によるものです。
-xipo=2 による内部手続き解析を行うべきでケース
内部手続き解析では、コンパイラは、リンク段階でオブ
ジェクトファイル群を走査しながら、プログラム全体の
解析と最適化を試みます。このとき、コンパイラは、こ
のオブジェクトファイル群に定義されているすべての
foo() 関数 (またはサブルーチン) に関して次の 2 つ
のことを仮定します。
(1) foo() は、実行時、このオブジェクトファイル群の
外部で定義されている別のルーチンによって明示的に呼
び出されない。
(2) オブジェクトファイル群内のルーチンからの foo()
呼び出しが、そのオブジェクトファイル群の外部に定義
されている別のバージョンの foo() からの割り込みを
受けない。
仮定 (1) が当てはまらない場合は、コンパイルで
-xipo=2 を使わないでください。
仮定 (2) が当てはまらない場合は、コンパイルで
-xipo=1 および -xipo=2 を使わないでください。
1 例として、独自のバージョンの malloc() で関数
malloc() に割り込むケースを考えてみましょう。
-xipo=2 を使ってコンパイルする場合、その独自のコー
ドとリンクされる malloc() を参照する、あらゆるライ
ブラリのあらゆる関数のコンパイルで -xipo=2 を使用
する必要があるとともに、リンクの段階でそれらのオブ
ジェクトファイルが必要になります。システムライブラ
リでは、このことが不可能なことがあり、このため、独
自のバージョンの malloc() のコンパイラに -xipo=2
を使ってはいけません。
もう 1 つの例として、別々のソースファイルにある
foo() および bar() という 2 つの外部呼び出しを含む
共有ライブラリを構築するケースを考えてみましょう。
また、bar() は foo() を呼び出すと仮定します。foo()
が実行時に割り込みを受ける可能性がある場合、foo()
および bar() のソースファイルのコンパイルで
-xipo=1 や -xipo=2 を使ってはいけません。さもない
と、foo() が bar() 内にインライン化され、不正な結
果になる可能性があります。
-xjobs=n (SPARC) 複数のプロセッサでコンパイルします。
-xjobs オプションを指定すると、コンパイラが処理を
行うために作成するプロセスの数を設定できます。この
オプションによって、マルチ CPU のマシンにおける構
築時間を削減できます。現在は、-xjobs は -xipo オプ
ションとともにしか働きません。-xjobs=n を指定した
場合、内部手続きオプティマイザは、複数のファイルを
コンパイルするのために起動する、コードジェネレータ
の最大数として n を使用します。
一般に n の安全な値は利用可能なプロセッサ数の 1.5
倍です。利用可能なプロセッサの数の何倍もの数を指定
すると、生成されたジョブ間でのコンテキスト切り替え
のオーバーヘッドが発生し、パフォーマンスの低下につ
ながります。また、値をあまり大きくすると、スワップ
ス空間などのシステム資源の限界を超過する可能性があ
ります。
-xjobs は必ず値を指定して使います。値を指定しない
とエラー診断が出て、コンパイルが異常終了します
コマンド行で -xjobs を複数指定すると、一番右以外の
指定は無効になります。
たとえば、2 つのプロセッサを搭載したシステムの場
合、次のコマンドは、-xjobs オプションを指定せずに
実行した場合よりも高速にコンパイルを行います。
example% CC -xipo -xO4 -xjobs=3 t1.cc t2.cc t3.cc
-xlang=language[,language]
適切な実行時ライブラリをインクルードして、指定され
た言語のための正しい実行時環境が確実に設定されるよ
うにします。
language には、 f77、 f90、 f95 のいずれかを指定し
ます。
引数 -f90 と -f95 は同義です。
相互の関連性:
-xlang=f90 オプション指定には -library=f90 が、
-xlang=f77 オプション指定には -library=f77 が、そ
れぞれ暗黙的に含まれています。ただし、複数の言語を
同時にリンクする場合は、 -library=f77 オプションお
よび -library=f90 オプションだけでは十分ではありま
せん。正しい実行時環境の確実な設定は、 -xlang オプ
ションでしか行えません。
複合言語のリンクに使用するドライバを決定するには、
以下の言語階層を使用してください。
1. C++
2. Fortran 95 (or Fortran 90)
3. Fortran 77
4. C または C99
Fortran 95、Fortran 77、および C++ オブジェクト
ファイルを一緒にリンクする場合は、最上位の言語のド
ライバを使用してください。例えば、C++ および For-
tran 95 オブジェクトファイルをリンクするには、以下
の C++ コンパイラコマンドを使用してください。
example% CC -xlang=f95...
Fortran 95 および Fortran 77 オブジェクトファイル
をリンクするには、以下のように、Fortan 95 ドライバ
を使用してください。
example% f95 -xlang=f77...
同じコンパイラコマンドでは、-xlang オプションと
-xlic_lib オプションは使用できません。 -xlang を使
用していて、Sun Performance Library にリンクする必
要がある場合は、代わりに -library=sunperf を使用し
てください。
警告:
-xnolib は、 -xlang とは一緒に使用しないでくださ
い。
並列 Fortran オブジェクトと C++ オブジェクトを混在
させる場合は、リンク行に -mt フラグを指定しなけれ
ばなりません。
関連項目:
-library、 -staticlib
-xldscope={v}
外部シンボル定義のためのデフォルトのリンカースコー
プを変更します。このデフォルトを変更することで実装
がよりよく隠蔽され、共用ライブラリをより高速かつ安
全に使用できるようになります。
値
v は次のいずれかの値です。
値 意味
global シンボル定義は、最も限定的でないリ
ンカースコープである大域リンカース
コープとなります。シンボル参照はす
べて、そのシンボルが定義されている
最初の動的ロードモジュールにおける
定義と結合します。外部シンボルのデ
フォルトのリンカースコープです。
symbolic シンボル定義は、大域リンカースコー
プよりも限定的なシンボリックリン
カースコープとなります。リンクしよ
うとする動的ロードモジュール内から
のシンボル参照はすべて、そのモ
ジュール内で定義されたシンボルに結
合します。モジュール外については、
シンボルは大域なものとなります。こ
のリンカースコープはリンカーオプ
ション -Bsymbolic と対応します。C++
ライブラリでは -Bsymbolic は使えま
せんが、 -xldscope=symbolic オプ
ションは問題なく使えます。
hidden 隠蔽リンカースコープは、シンボリッ
クや大域リンカースコープよりも限定
的です。動的ロードモジュール内の参
照はすべて、そのモジュール内の定義
に結合します。モジュールの外からは
このシンボルは見えません。
デフォルト
-xldscope を指定しない場合、コンパイラは
-xldscope=global を仮定します。値を付けずに
-xldscope を使った場合は、コンパイラでエラーとなり
ます。コマンド行にこのオプションのインスタンスを複
数指定すると、最も右側のインスタンスに達するまで、
前のインスタンスが上書きされていきます。
警告
クライアントがライブラリ内の関数をオーバーライドす
ることを許可しようとする場合、ライブラリ構築中にそ
の関数がインラインで生成されないようにする必要があ
ります。 -xinline で関数名が指定された場合、インラ
イン化が自動的に発生する -xO4 以上でコンパイルした
場合、インライン指定子を使用した場合、あるいはクロ
スファイル最適化を使用した場合、コンパイラは関数を
インラインにします。
たとえば、ライブラリ ABC にはデフォルトのアロケー
タ関数があり、それをライブラリクライアントが使え、
なおかつライブラリ内でも使用される場合を想定してみ
ます。
void* ABC_allocator(size_t size) { return
malloc(size); }
ライブラリを -xO4 以上で構築すると、コンパイラはラ
イブラリコンポーネント内に発生する ABC_allocator
の呼び出しをインライン化します。もしもライブラリの
クライアントがこの ABC_allocator をカスタマイズし
たバージョンで置き換えようとした場合、
ABC_allocator を呼び出したライブラリコンポーネント
内では置き換えは行なわれません。最終的なプログラム
には、この関数の相異なるバージョンが含まれることに
なります。
__hidden または __symbolic 指定子で宣言したライブ
ラリ関数は、ライブラリ構築時にインライン生成される
可能性があります。これらがクライアントからオーバー
ライドされることは、サポートされていません。詳細に
ついては『C++ ユーザーズガイド』の第 4 章「言語拡
張」を参照してください。
__global 指定子で宣言されたライブラリ関数は、イン
ラインとして宣言してはなりません。また、-xinline
コンパイラオプションを使ったインライン化も防ぐ必要
があります。
関連項目
-xinline、-xO、-xcrossfile、ld(1)
-xlibmieee
例外の場合、数学ルーチンに対して IEEE 745 値を返す
ように libm に指示します。 libm のデフォルトの動作
は XPG 準拠です。
-xlibmil 選択したライブラリルーチンを最適化用にインライン化
します。
一部の libm ライブラリルーチンには、インラインテン
プレートがあります。このオプションは、浮動小数点オ
プションと現在使用しているプラットフォームに対し
て、最速の実行可能ファイルを生成するインラインテン
プレートを選択します。
注 - このオプションは、C++ インライン関数には影響
しません。
-xlibmopt 最適化された数学ルーチンのライブラリを使用します。
このオプションを使用するときは -fround=nearest を
指定することによって、デフォルトの丸めモードを使用
する必要があります。
最適化された数学ルーチンのライブラリを使用して、通
常、より高速実行できるコードを生成します。通常の数
学ライブラリを使用した場合と比べて、結果が多少異な
る場合があります。その場合は、通常、最終ビットが異
なっています。
このライブラリオプションを指定するときは、コマンド
行での順序は関係ありません。
相互の関連性:
このオプションは、 -fast オプションを指定した場合
にも含まれます。
関連項目:
-fast および -xnolibmopt の項も参照してください。
-xlic_lib=sunperf
SPARC: Sun Performance Library とリンクします。
この -l のようなオプションは、ソースファイルおよび
オブジェクトファイルの後のコマンド行の終わりに置か
れる必要があります。
-library=sunperf オプションは Sun Performance
Library のリンクに推奨します。このオプションによ
り、ライブラリが正しい順序でリンクされることが保証
されるからです。さらに、-library=sunperf オプショ
ンは位置に依存せず (コマンド行のどこにでも置くこと
ができます)、-staticlib を使用して Sun Performance
Library に静的にリンクできます。-staticlib オプ
ションは、-Bstatic -xlic_lib=sunperf -Bdynamic の
組み合わせよりも便利です。
相互の関連性:
同じコンパイラコマンドで -xlang オプションと
-xlic_lib オプションは使用できません。-xlang を使
用していて、Sun Performance Library にリンクする必
要がある場合は、かわりに -library=sunperf を使用し
てください。
同じコンパイラコマンドで -library=sunperf と
-xlic_lib=sunperf は使用できません。
Sun Performance Library に静的にリンクするには、以
下の例で示すように、 -library=sunperf および
-staticlib=sunperf オプションを使用してください。
example% CC -library=sunperf -staticlib=sunperf
...
-library=sunperf のかわりに -xlic_lib=sunperf オプ
ションを使用することを選択した場合は、以下の例で示
すように -Bstatic オプションを使用してください。
example% CC ... -Bstatic -xlic_lib=sunperf
-Bdynamic ...
関連項目:
-staticlib
-xlicinfo ライセンスサーバー情報を表示します。
このオプションは、ライセンスサーバー名と、ライセン
スを所持するユーザーのユーザーID を返します。
-xlinkopt[=level]
(SPARC) 再配置可能オブジェクトファイルに対してリン
ク時に最適化を実行します。
リンクオプティマイザは、リンク時にバイナリオブジェ
クトコードに対してパフォーマンス上の高度な最適化を
多数、実行します。level の値で実行する最適化のレベ
ルを設定します。値は 0、1、2 のいずれかです。
最適化のレベルは以下のとおりです。
0 ポストオプティマイザは無効です (これはデ
フォルトです)。
1 命令キャッシュカラーリングおよび分岐の最
適化など、制御フロー分析に基づいて、リン
ク時の最適化を行います。
2 デッドコードの除去とアドレス計算の簡素化
など、より詳細なデータ制御分析に基づい
て、リンク時の最適化を行います。
レベルの値を指定せずに -xlinkopt を使った場合、
-xlinkopt=1 を指定したと見なされます。
こうした最適化はオブジェクトバイナリコードを分析し
てリンク時に実行されます。このオブジェクトファイル
は書き直されませんが、結果として出力される実行可能
コードは、元のオブジェクトコードとは異なる可能性が
あります。
このオプションは、プロファイルフィードバックを使用
してプログラム全体のコンパイルを行う際に使用するの
が最も効果的です。
コンパイルを複数の段階に分けて行う場合、コンパイ
ル、リンクの両段階で -xlinkopt を使用する必要があ
ります。
example% CC -c -xlinkopt a.cc b.cc
example% CC -o myprog -xlinkopt=2 a.o
level の値は、コンパイラがリンクを行う際にだけ使用
されることに注意してください。上記の例では、オブ
ジェクトバイナリは最適化レベル 1 を指定したとみな
されコンパイルされていますが、最適化のレベルとして
2 が使用されています。
リンクオプティマイザはインクリメンタルリンカーild
とともに使うことはできません。 -xlinkopt はデフォ
ルトのリンカーを ld に設定します。インクリメンタル
リンカーを -xildon で明示的に有効にすると、両方が
指定された場合に -xlinkopt が無効になります。
-xlinkopt を使ってコンパイルする場合、リンカーオプ
ション -zcompreloc は使用しないでください。
-xlinkopt がリンク時に効果を発揮できるようにするに
は、少なくともいくつかのコンパイルコマンドで
-xlinkopt を使用しなければなりません。オプティマイ
ザは、-xlinkopt を指定せずにコンパイルしたオブジェ
クトバイナリについても、限定的な最適化を行うことが
できます。
-xlinkopt はコンパイラのコマンド行に指定された静的
ライブラリからのコードを最適化しますが、コマンド行
に指定された共用 (動的) ライブラリから取り込んだ
コードはスキップして最適化しません。また、共用ライ
ブラリを構築する場合 ( -G を使用してコンパイルする
場合)、にも -xlinkopt を使用することができます。
リンクオプティマイザは実行時プロファイルのフィード
バックと共に使用すると最も効果的です。プロファイル
を行うことによって、コードの最も使用される部分と最
も使用されない部分を明らかにし、その結果に従ってオ
プティマイザを集中的に動作させることができます。こ
れは、リンク時にコードの最適な配置を行うことによっ
て命令キャッシュのミスを低減できる大きなアプリケー
ションにおいてはとくに重要です。通常、このコンパイ
ルは次のように行います。
example% CC -o progt -xO5 -xprofile=collect:prog file.cc
example% progt
example% CC -o prog -xO5 -xprofile=use:prog -xlinkopt file.cc
プロファイルのフィードバックの使用の詳細について
は、 -xprofile を参照してください。
このオプションを指定してコンパイルを行うと、リンク
時間が若干増加することに注意してください。オブジェ
クトファイルのサイズも増加しますが、実行可能ファイ
ルのサイズは変わりません。 -xlinkopt と -g を指定
してコンパイルを行うと、デバッグ情報が含まれるの
で、実行可能ファイルのサイズが大きくなります。
-xM 指定の C++ プログラムでプリプロセッサのみを実行
し、メークファイル依存を生成し、その結果を標準出力
に送るよう要求します。(メークファイルおよび依存性
については make (1) を参照してください)。
関連項目:
-xM1
メークファイルおよび依存関係についての詳細は、
make(1) のマニュアルページを参照してください。
-xM1 -xM とほぼ同じですが、 /usr/include のヘッダーファ
イルに関する依存関係は出力しません。このオプション
は、コンパイラが提供するヘッダーファイルの依存関係
を報告しません。
-xMerge (SPARC プラットフォーム)データセグメントをテキスト
セグメントと併合 (マージ) します。
オブジェクトファイルのデータは読み取り専用です。こ
のデータは、 ld -N を指定してリンクしない限り、プ
ロセス間で共有されます。
-xmaxopt[=v]
このコマンドは、pragma opt のレベルを指定レベルに
制限します。v は次のどれかである必要があります。
off、1、2、3、4、5。デフォルト値は -xmaxopt=off
で、pragma opt は無視されます。引数なしで
-xmaxopt を指定すると、-xmaxopt=5 を指定したのと
同じになります。
-xmemalign[=ab]
(SPARC) 想定される最大のメモリ整列と、誤って整列さ
れたデータがアクセスされたときの動作を指定します。
コンパイル時に整列が確定できるメモリアクセスの場
合、コンパイラがデータのその整列に対して、適切な
ロード / ストア命令の並びを生成します。
コンパイル時に整列が確定できないメモリアクセスの場
合、コンパイラは整列を想定して、必要なロード / ス
トア命令の並びを生成しなければなりません。
-xmemalign オプションを使用して、このような確定で
きない状況においてコンパイラが想定するデータの最大
メモリ整列を指定します。また、誤って整列されたメモ
リのアクセスが発生したときに、実行時に続いて行なう
エラー処理を指定することができます。
値:
a に対して指定可能な値は次のとおりです。
1 最大 1 バイトの整列を仮定します。
2 最大 2 バイトの整列を仮定します。
4 最大 4 バイトの整列を仮定します。
8 最大 8 バイトの整列を仮定します。
16 最大 16 バイトの整列を仮定します。
b に対して指定可能な値は次のとおりです。
i アクセスを解釈して実行を継続します。
s シグナル SIGBUS を出します。
f 4 以下の整列の場合はシグナル SIGBUS を出
します。その他の場合はアクセスを解釈して
実行を継続します。
デフォルト:
-xmemalign が指定されなかった場合のデフォルトは、
v8 アーキテクチャの場合 -xmemalign=8i、v9 アーキテ
クチャの場合 -xmemalign=8s です。
フラグなしで -xmemalign が指定された場合のデフォル
トは、どのプラットフォームでも -xmemalign=1i で
す。
-xnativeconnect [=n]
ネイティブコネクタツール (NCT) 用のコンパイルを可
能にします。
インタフェース情報をオブジェクトファイルと後続の共
用ライブラリに埋め込み、共用ライブラリが Java を変
換して認識できるようにするには、-xnativeconnect オ
プションを使用します。CC -G を使用して共用ライブラ
リを構築する場合も、-xnativeconnect を含める必要が
あります。
-xnativeconnect を使用してコンパイルする場合、ネイ
ティブコードインタフェースの最大外部可視性を指定し
ます。NCT を使用すると、Java コードと JNI コードの
自動生成が可能になります。NCT と -xnativeconnect
をともに使用することで、C++ 共用ライブラリの関数を
Java コードから呼び出せるようになります。NCT の使
用方法の詳細については、オンラインヘルプを参照して
ください。
このオプションは累積されません。コンパイラは、最後
に指定された設定を使用します。たとえば、CC
-xnativeconnect=inlines first.o
-xnativeconnect=interfaces second.o -O -G -o
library.so を指定すると、コンパイラはこのオプショ
ンを -xnativeconnect=no%inlines,interfaces に設定
します。
-g と -xnativeconnect を両方使用したときコンパイル
が実行されない場合、-g オプションを使用せずにコン
パイルしてみてください。
デフォルト:
n は、
[{%all|%none}][,][[no%]inlines][,][[no%]interfaces]]
です。
o -xnativeconnect を指定しないと、コンパイラはこの
オプションを
-xnativeconnect=%none に設定します。
o -xnativeconnect
-xnativeconnect だけを指定すると、コンパイラはこ
のオプションを
-xnativeconnect=inlines,interfaces に設定しま
す。
o -xnativeconnect=inlines
-xnativeconnect=inlines コマンドは、参照されたイ
ンライン関数の行外のインスタンスを強制的に生成し
ます。ネイティブコネクタの一部として生成された外
部関数をこれらの行外のインスタンスに結合できま
す。すべての呼び出しサイトにおけるこれらの関数の
通常のインライン化は、影響を受けません。
o -xnativeconnect=intefraces
-xnative=interfaces コマンドは、バイナリインタ
フェース記述子 (BIDS) を強制的に生成します。
注意:
-xnativeconnect を使用する場合、-compat=4 を使用し
てコンパイルしないでください。引数なしで -compat
を指定すると、コンパイラはこのオプションを -com-
pat=4 に設定することを覚えておいてください。-com-
pat を指定しないと、コンパイラはこのオプションを
-compat=5 に設定します。また -compat=5 を出力し
て、明示的に互換モードを設定できます。
-xnolib デフォルトのシステムライブラリとのリンクを無効にし
ます。
通常 (このオプションを指定しないで)、C++ コンパイ
ラはいくつかのシステムサポートライブラリにリンクし
て、C++プログラムをサポートします。このオプション
を指定すると、デフォルトのシステムサポートライブラ
リをリンクするための -llib オプションは ld に渡さ
れません。
通常、コンパイラは以下の順序でシステムサポートライ
ブラリにリンクします。
o 標準モード (デフォルトモード):
-lCstd -lCrun -lm -lc
o 互換モード (-compat[=4]):
-lC -lm -lc
-l オプションの順序は重要です。-lc 以前に -lm オプ
ションが指定される必要があります。
注 - -mt オプションを指定する場合はコンパイラは通
常、-lm とリンクする以前に -lthread とリンクしま
す。
デフォルトでリンクされるシステムサポートライブラリ
を決定するには、 -dryrun オプションでコンパイルし
てください。例えば、以下のコマンドからの出力です。
example% CC foo.cc -xarch=v9 -dryrun
以下を含んでいます。
-lCstd -lCrun -lm -lc
例:
C アプリケーションライブラリインタフェース (つまり
必要な C のサポートだけを組み込んだ C++ プログラム
) に合わせるためのコンパイル処理が最小限で済むよう
に、次のコードを使用します。
example% CC -xnolib test.cc -lc
汎用命令セットでシングルスレッドアプリケーションに
libm を静的にリンクするには、次のコマンドを使用し
ます。
o 標準モード:
example% CC -xnolib test.cc -lCstd -lCrun
-Bstatic -lm -Bdynamic -lc"
o 互換モード:
example% CC -compat -xnolib test.cc -lc -Bstatic
-lm -Bdynamic -lc"
相互の関連性:
libm.a および libc.a などの静的システムライブラリ
は、 -xarch=v9、-xarch=v9a または -xarch=v9b でリ
ンクされる場合は有効ではありません。
-xnolib を指定する場合、すべての必要なシステムサ
ポートライブラリを特定の順番で手動でリンクしなけれ
ばなりません。システムサポートライブラリは最後にリ
ンクしなければなりません。
-xnolib が指定されると、 -library は無視されます。
警告:
C++ 言語の多くの機能を使用するには、 libC (互換
モード) または libCrun (標準モード) を使用する必要
があります。
システムサポートライブラリのセットは安定していない
ため、今後のリリースで変更される可能性があります。
-xnolibmil
コマンド行の -xlibmil を取り消します。
このオプションを -fast と併用すると、最適化された
数学ライブラリとのリンクを無効にします。
-xnolibmopt
以前に指定された -xlibmopt オプションを無効にし、
数学ルーチンライブラリを使用しません。
相互の関連性:
このオプションは、コマンド行で -fast オプションを
指定した後に使用してください。例を示します。
example% CC -fast -xnolibmopt ...
-xOn 最適化レベル (n) を指定します (大文字の O の後に、
数字の 1、2、3、4、5 のいずれかを指定します)。
デフォルトでは最適化は行われません。ただし、このデ
フォルトは最適化レベルを指定しない場合にのみ当ては
まります。最適化レベルを指定した場合には、最適化を
無効にするオプションはありません。
最適化レベルを設定しないようにするには、最適化レベ
ルを暗に意味するようなオプションはどれも指定しない
ようしてください。たとえば -fast は -xO5 に最適化
レベルを設定するマクロオプションです。最適化レベル
を暗に意味するその他のオプションもすべて、最適化が
設定されたという警告メッセージを出します。最適化を
まったく行なわないでコンパイルする方法は、コマンド
行からすべてのオプションを削除するか、最適化レベル
を指定するファイルを作成することだけです。
一般的に、プログラムをコンパイルする際の最適化のレ
ベルが上がるほど、実行時のパフォーマンスも上がりま
す。しかし、最適化レベルが上がるほど、コンパイル時
間と実行可能ファイルのサイズは増えます。
-xOn に指定できるレベルは 5 つあります。次の節で
は、SPARC プラットフォーム、IA プラットフォーム、
およびその他の各プラットフォームの場合での各レベル
の違いを説明します。
値:
SPARC プラットフォームの場合:
メモリーが不足した場合、オプティマイザはもう一度よ
り低いレベルの最適化で処理しようとし、その後のルー
チンのコンパイルを元のレベルで再開します。
-xO1 最小の最適化 (ピープホール) だけを行います。
-xO2 基本的な局所的および大域的な最適化を行いま
す。このレベルには、帰納変数の削除、局所的お
よび大域的な共通の式の一部の削除、代数の簡約
化、コピーの伝播、定数の伝播、ループ不変式の
最適化、レジスタの割り当て、基本的なブロック
のマージ、末尾再帰の削除、デッドコードの削
除、末尾呼び出しの削除、および複雑な数式の展
開が含まれます。
このレベルでは、外部変数または間接変数の参照
または定義は最適化されません。一般的に、この
レベルでは、コードのサイズが最小になります。
-O と -xO2 は同じです。
-xO3 -xO2 レベルで実行する最適化に加え、外部変数に
対する参照と定義も最適化します。このレベルで
は、ポインタ割り当ての影響は追跡されません。
volatile により適切に保護されないデバイスドラ
イバ、または、シグナルハンドラの内部から外部
変数を変更するプログラムをコンパイルするとき
には、 -xO2 を使用します。
一般的に、 -xO3 では、コードのサイズが増えま
す。スワップ領域が不足している場合は、 -xO2
を使用してください。
-xO4 -xO3 レベルで行われる最適化に加え、同じファイ
ルに含まれる関数の自動インライン化も行いま
す。この自動インライン化は、通常、実行速度を
上げますが、その逆の結果になる場合もありま
す。一般的に、このレベルでは、コードのサイズ
が増えます。
-xO5 最高レベルの最適化を行います。コンピュータ時
間の大部分を使用する、プログラムのごく一部だ
けに適しています。より多くのコンパイル時間を
要するか、実行時間を改善する確実性が低い最適
化アルゴリズムを使用します。このレベルの最適
化は、プロファイルのフィードバックと併用する
と、パフォーマンスが上がる確率が高まります。
-xprofile を参照してください。
IA プラットフォームの場合:
-xO1 基本的な最適化を行います。これには、算術の簡
素化、レジスタの割り当て、基本ブロックのマー
ジ、無意味なコードおよびストアの除去、および
ピープホール最適化が含まれています。
-xO2 -x01 レベルで行う最適化のほかに、大域的な共通
部分式の除去、コピーおよび定数の伝播、再帰的
な末尾の除去を行います。
-O と -xO2 は同義です。
-xO3 -x02レベルで行う最適化のほかに、大域的な共通
部分式の除去、大域的なコピーと定数の伝播、
ループ強度縮小、帰納変数の除去、および可変
ループ最適化を行います。
-xO4 -xO3 で行う最適化のほかに、同じファイルにある
関数の自動インライン化を行います。この自動イ
ンライン化は、ほとんどの場合に実行速度を向上
させますが、逆に低下させることもあります。こ
のレベルでは、フレームポインタレジスタ (ebp)
を汎用的な目的に使用できるようになります。一
般にこの最適化レベルでは、コードサイズが大き
くなります。
-xO5 最高レベルの最適化を行います。このレベルで
は、コンパイル時間が長くなる可能性があり、実
行時間が確実に改善されるかどうか不明な最適化
アルゴリズムを使用します。
相互の関連性:
-g または -g0 を使用するとき、最適化レベルが -xO3
以下の場合、最大限のシンボリック情報とほとんど完全
な最適化が得られます。末尾呼び出しの最適化とバック
エンドインライン化は無効です。
-g または -g0 を使用するとき、最適化レベルが -xO4
以上の場合、最大限のシンボリック情報と完全な最適化
が得られます。
-g でデバッグしても、 -xOlevel は抑止されません。
しかし、 -xOlevel は、 -g をある程度制限します。た
とえば、 -xOlevel オプションを使用すると dbx から
の変数が表示できなくなるために、デバッグがやりづら
くなります。それでも、 dbx の where コマンドを使用
すれば、シンボルによる追跡は行えます。詳細は、
『dbx コマンドによるデバッグ』を参照してください。
-xcrossfile オプションは、 -xO4 または -xO5 と一緒
に使用したときだけ有効です。
-xinline オプションは、-xO3 の下の最適化レベルに影
響しません。 -xO4 において、オプティマイザによりイ
ンライン化される関数が決定されます。これは、-xin-
line オプションの指定に関わらず行われます。 -xO4
において、コンパイラは、インライン化された関数でパ
フォーマンスを改善するものを決定しようとします。
-xinline で関数のインライン化を行う場合は、実際に
パフォーマンスが悪くなる可能性があります。
警告:
一つの手続きの中に何千ものコードが存在する非常に大
きな手続きで -xO3 または -xO4 で最適化を行う場合、
オプティマイザは莫大な量のメモリーを要求します。マ
シンのパフォーマンスが悪くなる場合もあります。
このパフォーマンス低下を避けるために、単一のプロセ
スで使用できる仮想メモリーの量を制限するために
limit コマンドを使用します (csh(1) のマニュアル
ページを参照)。例えば、仮想メモリーを 16 メガバイ
トに制限するには、以下のように指定します。
example% limit datasize 16M
このコマンドにより、オプティマイザは、データ空間が
16 メガバイトに達した場合に回復しようとします。
制限は、マシンで使用可能なスワップ空間全体より大き
くなることはありません。大規模なコンパイルが行われ
ている間にマシンが通常に使用できる程度に小さくする
必要があります。
最適なデータのサイズは、必要とされる最適化の程度、
実メモリーの量、使用できる仮想メモリーによります。
実際のスワップ空間を検索するには、swap -1 と入力し
ます。
実際の実メモリーを検索するには、dmesg | grep mem
と入力します。
関連項目:
-xldscope, -fast、 -xprofile=p、 csh(1) のマニュア
ルページ
『プログラムのパフォーマンス解析』は、アナライザの
データへの様々な最適化レベルの影響について説明しま
す。
-xopenmp [=i]
(SPARC) -xopenmp オプションを使用すると、OpenMP 指
令との明示的並列化が可能になります。
値
i は parallel、stubs、または none のいずれかです。
o -xopenmp=parallel
-xopenmp だけを指定した場合、コンパイラはこのオ
プションを -xopenmp=parallel に設定します。
-xopenmp=parallel は OpenMP プラグマを認識しま
す。これは SPARC のみに適用されます。
-xopenmp=parallel での最適化レベルは、-xO3です。
プログラムの最適化レベルがより低いレベルから
-xO3 に変更された場合、コンパイラは警告を出力し
ます。
o -xopenmp=stubs
-xopenmp=stubs コマンドは、OpenMP API ルーチン用
にスタブルーチンとリンクします。連続して実行する
ためにアプリケーションをコンパイルする必要がある
場合は、このオプションを使用してください。
-xopenmp=stubs コマンドは、_OPENMP プリプロセッ
サトークンも定義します。
o -xopenmp=none
-xopenmp=none コマンドは、OpenMP プラグマの認識
を有効にしません。プログラムの最適化レベルは変更
されず、プリプロセッサトークンも事前定義されませ
ん。
デフォルト
-xopenmp を指定しない場合、コンパイラは
-xopenmp=none と設定します。
-xopenmp を指定してこれに引数をつけなかった場合、
コンパイラは -xopenmp=parallel と設定します。
警告
コンパイルとリンクを別々のステップで実行する場合、
リンクのステップにも -xopenmp を指定してください。
これはとくに OpenMP 指令を含むライブラリをコンパイ
ルするときに重要です。
既知の制限
以下のリストは、C++ コンパイラでの OpenMP 機能の既
知の制限の詳細です。
o 入れ子の並列化のサポートなし
C++ コンパイラは、OpenMP 2.0 ドラフト標準に定義
された入れ子の並列化をサポートしません。
o ループインデックス修正のチェックなし
コンパイラは、ループインデックス用の OpenMP が
ループ本体の中で修正されていないかどうか確認しま
せん。
o チャンクサイズのチェックなし
コンパイラは、実行時の障害が原因で発生するゼロ値
や負の値のチェックをコンパイル時に実行しません。
o 短縮文節に使用されている過負荷演算子のチェックな
し
コンパイラは、縮約文節に引数として使用される演算
子が多重定義されているかどうかを検出しません。
o 現在再検討中のエラーメッセージテキスト
OpenMP エラーメッセージシステムは再検討中です。
メッセージの中には、不正確であったり無用のものも
あります。
-xpagesize=n
(SPARC) スタックおよびヒープの優先ページサイズを設
定します。
n の値は次のいずれかでなければなりません。
8K、64K、512K、4M、32M、256M、2G、16G、default
対象となるプラットフォーム上の Solaris オペレー
ティングシステムで有効なページサイズを指定する必要
があります。 getpagesize(3C) を使用するとそのサイ
ズがわかります。有効なページサイズを指定しなかった
場合、その要求は実行時に無視され、メッセージは出力
されません。Solaris オペレーティング環境では、ペー
ジサイズ要求が優先されることを保証してはいません。
pmap(1) または meminfo(2) を使用して、対象となるプ
ラットフォームのページサイズを確認することができま
す。
-xpagesize オプションは、コンパイルおよびリンク時
に使わないと効果はありません。
この機能は Solaris 8 ソフトウェアでは利用できませ
ん。このオプションを使ってコンパイルされたプログラ
ムは、Solaris 8 ソフトウェア上でリンクできません。
-xpagesize=default を指定すると、Solaris オペレー
ティング環境がページサイズを設定します。
このオプションは -xpagesize_heap および
-xpagesize_stack のためのマクロです。この 2 つのオ
プションは -xpagesize と同じく 8K、64K、512K、4M、
32M、256M、2G、16G、default を引数として受け付けま
す。 -xpagesize=n と指定して上記の 2 つのオプショ
ンに同じ値を設定することができ、あるいはこれらを
別々に指定して異なる値に設定することも可能です。
このオプションを使ってコンパイルすることは、
mpss.so.1 への LD_PRELOAD 環境変数を同じオプション
を使って設定すること、またはプログラム実行前に
Solaris 9 コマンドの ppgsz(1) を同じオプションを
使って実行するのと、同様の効果があります。詳細は
Solaris 9 のマニュアルページを参照してください。
-xpagesize_heap=n
(SPARC) ヒープのためのメモリのページサイズを設定し
ます。n は 8K、64K、512K、4M、32M、256M、2G、16G、
または default です。対象となるプラットフォームの
Solaris オペレーティング環境で有効なページサイズを
指定しなければなりません。この値は getpagesize(3C)
で確認できます。有効なページサイズを指定しなかった
場合、その要求は実行時に無視され、メッセージは出力
されません。
pmap(1) または meminfo(2) を使用して、対象となるプ
ラットフォームのページサイズを確認することができま
す。
-xpagesize_heap=default と指定した場合、Solaris オ
ペレーティング環境はページサイズを設定します。
このオプションを使ってコンパイルすることは、
mpss.so.1 への LD_PRELOAD 環境変数を同じオプション
を使って設定すること、またはプログラム実行前に
Solaris 9 コマンドの ppgsz(1) を同じオプションを
使って実行するのと、同様の効果があります。詳細は
Solaris 9 のマニュアルページを参照してください。
この機能は Solaris 8 ソフトウェアでは利用できませ
ん。このオプションを使ってコンパイルされたプログラ
ムは、Solaris 8 ソフトウェア上でリンクできません。
-xpagesize_stack=n
(SPARC) スタックのためのメモリのページサイズを設定
します。n は 8K、64K、512K、4M、32M、256M、2G、
16G、または default です。対象となるプラットフォー
ムの Solaris オペレーティング環境で有効なページサ
イズを指定しなければなりません。この値は
getpagesize(3C) で確認できます。有効なページサイズ
を指定しなかった場合、その要求は実行時に無視され、
メッセージは出力されません。
pmap(1) または meminfo(2) を使用して、対象となるプ
ラットフォームのページサイズを確認することができま
す。
-xpagesize_stack=default と指定した場合、Solaris
オペレーティング環境がページサイズを設定します。
このオプションを使用してコンパイルすることは、
mpss.so.1 への LD_PRELOAD 環境変数を同じオプション
を使って設定すること、またはプログラム実行前に設定
すること、またはプログラム実行前に Solaris 9 コマ
ンドの ppgsz(1) を同じオプションを使って実行するの
と、同様の効果があります。詳細は Solaris 9 のマ
ニュアルページを参照してください。
この機能は Solaris 8 ソフトウェアでは利用できませ
ん。このオプションを使ってコンパイルされたプログラ
ムは、Solaris 8 ソフトウェア上でリンクできません。
-xpch=v このコンパイラオプションは、プリコンパイル済みヘッ
ダー機能を有効にします。v は auto か autofirst、
collect:pch_filename、use:pch_filename のいずれか
です。この機能は、#pragma hdrstop 指令との組み合わ
せで -xpch および -xpchstop を使用することによって
活用できます。
-xpch オプションを使用すると、プリコンパイル済み
ヘッダーファイルを作成して、コンパイル時間を改善で
きます。プリコンパイル済みヘッダーファイルは、多量
のソースコードを含む一連の共通したインクルードファ
イルを使用するソースファイルを持っているアプリケー
ションの、コンパイル時間を短縮する目的で設計されま
した。プリコンパイル済みヘッダーファイルは、1 つの
ソースファイルから一連のヘッダーファイルに関する情
報を収集し、その後そのソースファイルを再コンパイル
するとき、また同様の一連のヘッダーファイルを持つ別
のソースファイルをコンパイルするときに、その情報を
使います。
プリコンパイル済みヘッダーファイルの自動生成
コンパイル済みヘッダーファイルをコンパイラに自動的
に生成させることができます。方法は 2 通りありま
す。1 つは、ソースファイルから最初に検出されたイン
クルードファイルからプリコンパイル済みヘッダーファ
イルをコンパイラに作成させる方法です。もう 1 つ
は、ソースファイルから最初に検出されたインクルード
ファイルから、最後のインクルードファイルを示す綿密
な定義ポイントに基づいて決定される範囲からコンパイ
ラにインクルードファイルを選択させる方法です。次の
2 つのフラグのいずれかを使って、プリコンパイル済み
ヘッダーの自動生成でコンパイラが使用する方法を指定
します。
-xpch=auto
プリコンパイル済みヘッダーファイルの内容は、
コンパイラがソースファイルから検出したうちで
最も長い活性文字列 (viable prefix) に基づいて
います。(活性文字列の識別方法については、次の
セクションを参照) このフラグは、最大可能数の
ヘッダーファイルからなるプリコンパイル済み
ヘッダーファイルを生成します。
-xpch=autofirst
このフラグは、ソースファイルから最初に検出さ
れたヘッダーのみを含むプリコンパイル済みヘッ
ダーファイルを生成します。
手動でのプリコンパイル済みヘッダーファイルの作成
プリコンパイル済みヘッダファイルを手動で作成する場
合は、 -xpch を使用し、その後で collect モードを指
定する必要があります。 -xpch=collect を指定したコ
ンパイルコマンドには、ソースファイルは
1 つだけ指定します。次の例では、 -xpch オプション
によってソースファイル a.cc から myheader.Cpch と
いうプリコンパイル済みヘッダーファイルが作成されま
す。
CC -xpch=collect:myheader a.cc
有効なプリコンパイル済みヘッダーファイルの名前には
必ず接尾辞 .Cpch が付いています。pch_filename を指
定するときには自分でこの接尾辞を付けるか、コンパイ
ラに付けてもらいます。たとえば、CC
-xpch=collect:foo a.cc と指定すると、プリコンパイ
ル済みヘッダーファイルは、foo.Cpch という名前にな
ります。
コンパイラが既存のプリコンパイル済みヘッダーファイ
ルを処理する方法
コンパイラが次の規則に従って既存のプリコンパイル済
みヘッダーファイルの処理方法を決定します。
既存のプリコンパイル済みヘッダーファイルを検出した
場合、コンパイラは、ファイルの次の属性と現在のコン
パイルから得られた情報との間で次のすべて条件が満た
されたときにのみ、そのファイルを使用します。
- 活性文字列が一致
- コマンド行オプションが完全に同じ
- 現在の作業用ディレクトリが同じ
- ソースディレクトリのパス名が同じ
- コンパイラとプリコンパイル済みヘッダーファイ
ルのバージョン番号が一致
活性文字列が一致と見なされるには次の条件が真である
必要があります。
- #include のファイル名がすべて同じ
- #define および #undef の指令が同じシンボルを
参照し、それら指令の出現順が同じ
- #define に関連付けられている値が同一
- 存在する pragma が元の順序で出現する
活性文字列では、#ident/#pragma idents は「そのま
ま」は渡されず、同等検査されないことに注意してくだ
さい。一般に、文字列引数はソースファイルごとに異な
り、このため、検査した場合、既存のプリコンパイル済
みヘッダーファイルの使用は禁止されます。
一致条件で使用されるコンパイラバージョンは、コンパ
イラの -V によって返されるバージョンと同じです。
特定のプリコンパイル済みヘッダーファイルの使用の指
示
特定のプリコンパイル済みヘッダーファイルを使用する
ようコンパイラに指示することもできます。このために
は、-xpch=use:pch_filename を指定します。プリコン
パイル済みヘッダーファイルを作成するときに使った
ソースファイルと同じようにインクルードファイルが並
んでいるソースファイルならば、いくつでも指定できま
す。たとえば、利用モードのコマンドは次のようになり
ます。
CC -xpch=use:foo.Cpch foo.cc bar.cc foobar.cc
既存のプリコンパイル済みヘッダーファイルは、以下の
ことが当てはまるときのみ使用するようにします。もし
も次のいずれかが当てはまらない場合には、プリコンパ
イル済みヘッダーファイルを再作成したほうがよいで
しょう。
- プリコンパイル済みヘッダーファイルのアクセスに使
用するコンパイラが、プリコンパイル済みヘッダーファ
イルを作成したコンパイラと同じ。あるバージョンで作
成されたプリコンパイル済みヘッダーファイルが、その
コンパイラの別のバージョンで利用できるとは限りませ
ん。
- -xpch オプションを除いて、-xpch=use で指定するコ
ンパイラオプションは、プリコンパイル済みヘッダー
ファイルを作成したときの指定と合っている必要があり
ます。
- -xpch=use で指定するインクルードヘッダーが、プリ
コンパイル済みヘッダー作成時に指定した一連のヘッ
ダーと同じ。
- -xpch=use で指定するインクルードヘッダーの中身が
プリコンパイル済みヘッダー作成時に指定されたインク
ルードヘッダーの中身と同じ。
- 現在のディレクトリ (つまり、コンパイルが行なわれ
ていて、所定のプリコンパイル済みヘッダーファイルを
使用しようとしているディレクトリ) が、プリコンパイ
ル済みヘッダーファイルが作成されたディレクトリと同
じ。
- -xpch=collect で指定したファイルにあった、
#include 指令を含む最初のプリプロセス指令の並び
が、 -xpch=use で指定するファイルにあるプリプロセ
ス指令の並びと同じ。
活性文字列 (Viable Prefix)
複数のソースファイル間でプリコンパイル済みヘッダー
ファイルを共有するには、それらのソースファイルが、
その初期トークンシーケンスして共通のインクルード
ファイル群を共有している必要があります。トークン
は、キーワードや名前、および適切な記号の組み合わせ
から成ります。コンパイラは、コメントおよび、#if 指
令によって除外されているコードをトークンとして認識
しません。この初期トークンシーケンスは、活性文字列
(viable prefix) と呼ばれます。言い替えれば、活性文
字列は、すべてのソースファイルの先頭に共通に存在す
る部分です。コンパイラは、プリコンパイル済みヘッ
ダーファイルを作成し、ソースからプリコンパイルされ
ているヘッダーファイルを特定する際の基礎情報として
この活性文字列を利用します。
現在のコンパイル中にコンパイラが検出する活性文字列
は、プリコンパイル済みヘッダーファイルの作成に使用
された活性文字列と一致している必要があります。言い
替えれば、同じプリコンパイル済みヘッダーファイルを
使用しているどのソースファイルについても、コンパイ
ラがその活性文字列の一貫した解釈ができる必要があり
ます。
活性文字列は、次のプリプロセッサ指令のいずれかで構
成されます。
#include
#if/ifdef/ifndef/else/elif/endif
#define/undef
#ident
#pragma
これらはいずれもマクロを参照できます。#else、
#elif、#endif 指令は活性文字列の中で合致するもので
なければなりません。コメントは無視されます。
-xpch=auto か -xpch=autofirst が指定されていて、活
性文字列が次のように定義されている場合、コンパイラ
は自動的に活性文字列の終わりを特定します。
-xpch=collect または -xpch=use の場合、活性文字列
は #pragma hdrstop で終わる。
- 最初の宣言/定義文
- 最初の #line 指令
- #pragma hdrstop 指令
- -xpch=auto および -xpchstop が指定されている場合
は、指定されているインクルードファイルの後
- -xpch=autofirst が指定されている場合は最初のイン
クルードファイル
次の点に注意してください。条件文内に終わりがある場
合は、警告が生成され、プリコンパイル済みヘッダー
ファイルの自動作成は無効になります。また #pragma
hdrstop
と -xpchstop オプションの両方が指定されている場
合、コンパイラは 2 つの停止点のうちの前の方を使っ
て、活性文字列を終了します。
プリコンパイル済みヘッダーファイルを共用する各ソー
スファイルの活性文字列の中では、対応する #define
指令と #undef 指令が同じシンボルを参照しなければな
りません (#define の場合、どれもが同じ値を参照する
必要があります)。活性文字列内に出てくる順序も同じ
でなければなりません。対応するプラグマも、プリコン
パイル済みヘッダーを共用するファイルすべてで同じで
あり、その順序も同じでなければなりません。
ヘッダーファイルの妥当性の判定
ヘッダーファイルがプリコンパイル可能となる条件。そ
れは、どのソースファイルでも、ヘッダーファイルの一
貫した解釈ができることです。具体的には、完全な宣言
だけが含まれていることです。すなわち、どのファイル
の宣言も有効な宣言として独立している必要がありま
す。struct S; などの不完全な型宣言は有効な型宣言で
す。この完全な型宣言は他のファイルに存在している可
能性があります。次のヘッダーファイル例を参考にして
ください。
file a.h
struct S {
#include "x.h" /* not allowed */
};
file b.h
struct T; // ok, complete declaration
struct S {
int i;
[end of file, continued in another file] /* not
allowed */
file c.h
namespace N {
int foo();
[end of file, continued in another file] /* not
allowed */
file d.h
extern "C" {
int foo();
[end of file, continued in another file] /* not
allowed */
file e.h
namespace N {
int foo();
} /* OK, a stand-alone namespace declaration
*/
file f.h
namespace N {
int bar();
} /* OK, namespace re-opened, but still
stand-alone */
プリコンパイル済みヘッダーファイルに組み込まれる
ヘッダーファイルは、次の制約に違反してはなりませ
ん。これらの制約のいずれかに違反するプラグマをコン
パイルした場合、その結果は予測できません。
- ヘッダーファイルに、__DATE__ および __TIME__ が
使用されていてはいけません。
- ヘッダーファイルに #pragma hdrstop が含まれてい
てはいけません。
プリコンパイル済みヘッダーファイルのキャッシュ
プリコンパイル済みヘッダーファイルを自動的に作成し
たとき、コンパイラはそのファイルを SunWS_cache
ディレクトリに書き込みます。このディレクトリはつね
に、オブジェクトファイルが作成される場所に置かれま
す。dmake の下で適切に機能するよう、ファイルの更新
はロックして行われます。
自動的生成されたプリコンパイル済みヘッダーファイル
をコンパイラに強制的に再構築させる必要がある場合
は、CCadmin ツールを使って、この PCH キャッシュ
ディレクトリをクリアすることができます。詳細は、
CCadmin(1) のマニュアルページを参照してください。
警告
o 矛盾する -xpch フラグをコマンド行に指定しないで
ください。たとえば -xpch=collect と
-xpch=autofirst の両方を指定したり、
-xpchstop=<include> を付けて -xpch=autofirst を指
定したりすると、エラーになります。
o -xpch=autofirst を指定するか、-xpchstop なしで
-xpch=auto を指定した場合、最初のインクルードファ
イル、あるいは -xpch=auto に -xpchstop を付けて指
定したインクルードファイルの前に宣言や定義、#line
指令があると、エラーになり、プリコンパイル済みヘッ
ダーファイルの自動生成が無効になります。
o -xpch=autofirst または -xpch=auto で、最初のイ
ンクルードファイルの前に #pragma hdrstop がある
と、プリコンパイル済みヘッダーファイルの自動生成が
無効になります。
プリコンパイル済みヘッダーファイルの依存関係と
make ファイル
-xpch=collect が指定されている場合、コンパイラはプ
リコンパイル済みヘッダーファイル用の依存関係情報を
生成します。この依存関係情報を活用するには、make
ファイル内に適切な規則を作成する必要があります。次
の make ファイル例を参考にしてください。
%.o : %.cc shared.Cpch
$(CC) -xpch=use:shared -xpchstop=foo.h -c $<
default : a.out
foo.o + shared.Cpch : foo.cc
$(CC) -xpch=collect:shared -xpchstop=foo.h foo.cc
-c
a.out : foo.o bar.o foobar.o
$(CC) foo.o bar.o foobar.o
clean :
rm -f *.o shared.Cpch .make.state a.out
コンパイラによって生成された依存関係情報とともに、
これらの make 規則があると、-xpch=collect で使用さ
れたソースファイル、またはプリコンパイル済みヘッ
ダーファイルを構成するヘッダーのどれかに変更があっ
た場合、手動で作成されたプリコンパイル済みヘッダー
ファイルが強制的に再作成されます。これにより、古い
プリコンパイル済みヘッダーファイルの使用が防止され
ます。
-xpch=auto または -xpch=autofirst の場合、メーク
ファイル内に追加の make 規則を作成する必要はありま
せん。
関連項目: -xpchstop
-xpchstop=file
ここでの file は、プリコンパイル済みヘッダーファイ
ルの作成時の最後のインクルードファイルです。コマン
ド行に -xpchstop を指定することは、cc コマンドで指
定したソースファイルのそれぞれで、ファイルをインク
ルードする include 指定子の後に、hdrstop プラグマ
(-xhelp=readme を参照) を置くのと同じことです。
<include> までのヘッダーファイルに基づいてプリコン
パイル済みヘッダーファイルを作成するには、
-xpchstop=<include> と -xpch=auto を組み合わせま
す。このフラグは、活性文字列全体に含まれるすべての
ヘッダーファイルを使用するという、デフォルトの
-xpch=auto の動作を無効にします。
関連項目: -xpch、-xhelp=readme
-xpg gprof プロファイラによるプロファイル用にコンパイル
します。
-xpg オプションは自己プロファイルコードをコンパイ
ルし、 gprof でのプロファイル用のデータを収集しま
す。このオプションは実行時記録メカニズムも持ってお
り、プログラムが正常に終了すると、 gmon.out ファイ
ルを生成します。
この作業はパフォーマンスアナライザでも実行できま
す。 analyzer(1) のマニュアルページを参照してくだ
さい。
警告:
コンパイルとリンクを別々に行う場合、コンパイル時に
-xpg を使用したときは、リンク時にも -xpg を使用し
なければなりません。
-xport64[=v]
このオプションを使用すると、コードを 64 ビット環境
に容易に移植できます。具体的には、V8 などの 32
ビットアーキテクチャから V9 などの 64 ビットアーキ
テクチャにコードを移植するときによく見られる、型 (
ポインタを含む) の切り上げ、符号拡張、ビットパッキ
ングといった問題をこのオプションが警告します。
値:
v は次のいずれかの値です。
値 意味
no 32 環境から 64 ビット環境へのコード
の移植に関する警告を生成しません。
implicit 暗黙の変換に関する警告だけを生成し
ます。明示的なキャストが存在する場
合には警告を生成しません。
full 32 ビット環境から 64 ビット環境への
コードの移植に関する警告をすべて生
成します。64 ビットの値の切り上げ、
ISO の値保持の規則に基づいた 64
ビットへの符号拡張、ビットフィール
ドのパッキングの変更などが含まれま
す。
デフォルト:
-xport64 を指定しない場合、デフォルトは
-xport64=no になります。-xport64 を指定して、フラ
グは指定しない場合、デフォルトは -xport64=full と
なります。
関連項目: -xarch
-xprefetch[=a[,a]]
(SPARC プラットフォーム) UltraSPARC II (-
xarch=v8plus、 v8plusa、v8plusb、v9、 v9a、v9bのい
ずれか) などの、先読み機能をサポートするアーキテク
チャ上で先読み命令を有効にして調整します。
a には、次のいずれかの値を指定します。
値 意味
auto 先読み命令の自動生成を有効にしま
す。
no%auto 自動生成を無効にします。
explicit 明示的な先読みマクロを有効にしま
す。
no%explicit 明示的な先読みマクロを無効にしま
す。
latx:factor このフラグは -xprefetch=auto とのみ
組み合わせられます。コンパイラによ
るロード命令とストア命令に対する先
読み命令の、「潜在期間」の仮定値
を、指定された係数 (factor) で調整
します。factor は、正の浮動小数点ま
たは整数でなければなりません。
yes 廃止 - 使わないでください。代わりに
-xprefetch=auto,explicit を使ってく
ださい。
no 廃止 - 使わないでください。代わりに
-xprefetch=no%auto,no%explicit を
使ってください。
-xprefetch、および -xprefetch=auto を使用すると、
コンパイラは必要に応じて先読み命令をコード中に挿入
します。これによって、先読み機能をサポートするアー
キテクチャではパフォーマンスが向上する場合がありま
す。
大規模マルチプロセッサで、計算集約型コードを実行す
る場合、 -xprefetch=latx:factor を使用すると便利で
す。このオプションでは、先読み命令と計数により指定
された関連するロードまたはストア間のデフォルトの潜
在期間を調整するようコードジェネレータに指示しま
す。
先読み命令の「潜在期間」とは、先読み命令が実行され
た時点から、先読み命令の対象であるデータが実際に
キャッシュに入れられる時点までの、ハードウェアに起
因する時間のずれを指します。コンパイラは、先読み命
令の挿入位置と、先読みされたデータを使用するロード
またはストアの命令文の位置がどれだけ離れているかを
確認して、先読みの潜在期間を仮定します。
注意
仮定される先読みの潜在期間は、ロード命令とストア命
令では異なる場合があります。
コンパイラは、広範囲に渡るマシンおよびアプリケー
ションに対して適切になるように、先読みのメカニズム
を調整しています。このため現在の機能が、すべてのマ
シンまたはアプリケーションで最良であるとは限りませ
ん。メモリーを大量に消費するアプリケーション、特に
大規模な複数のプロセッサで実行するアプリケーション
の場合は、先読みの潜在期間を示す値を増加させた方
が、パフォーマンスが向上する可能性があります。先読
みの潜在期間を増加させるには、 factor の値を 1 よ
り大きい値にします。 .5 から 2.0 の間の値にする
と、ほぼ確実に最高のパフォーマンスが得られます。
完全に外部のキャッシュに存在するデータベースを扱う
アプリケーションの場合は、先読みの潜在期間を減少さ
せた方が、パフォーマンスが向上する可能性がありま
す。先読みの潜在期間を減少させるには、 factor の値
を 1 より小さい値にします。
-xprefetch=latx:factor オプションを使用する場合
は、まず factor の値を 1.0 に近い値に設定して、対
象のアプリケーションに対するパフォーマンスを調べま
す。そして徐々にその値を変化させていき、パフォーマ
ンスの変化を確認します。最良のパフォーマンスが得ら
れるまでテストを繰り返します。値を細かく変更した場
合は、しばらくの間パフォーマンスの変化はまったく見
られませんが、ある値で突然高くなります。続けて値を
増加または減少させていくと、パフォーマンスは再び下
がります。
デフォルト:
デフォルトは -xprefetch=auto,explicit です。
-xprefetch または -xprefetch=auto によって自動先読
み実行が有効に設定されているにも関わらず、潜在期間
の値が指定されていない場合は、 latx:1.0 が仮定され
ます。
相互の関連性:
このオプションは上書きされずに累積されます。
ヘッダーファイル sun_prefetch.h によって、明示的な
先読み命令を指定するマクロが使用できます。先読み指
令は、実行可能ファイル中の、マクロとほぼ同じ位置に
挿入されます。
明示的な先読み指令を使用するには、正しいアーキテク
チャ上で、 sun_prefetch.h をインクルードし、コンパ
イラコマンドには -xprefetch を使用しないか、
-xprefetch、 -xprefetch=auto,explict、
-xprefetch=explicit、 -xprefetch=yes のいずれかを
指定しなければなりません。
マクロを呼び出して sun_prefetch.h ヘッダーファイル
をインクルードしたにも関わらず
-xprefetch=no%explicit または -xprefetch=no を指定
した場合は、明示的な先読み命令は実行可能ファイル中
には挿入されません。
-xchip の設定は、仮定される潜在期間の決定に影響を
及ぼします。つまり、 latx:factor の設定も影響を受
けます。
latx:factor サブオプションは、自動先読みが有効に
なっている場合にのみ有効です。つまり、 latx:factor
は、 yes または auto と一緒に使用されない限り、無
視されます。
警告:
明示的な先読みは、パフォーマンスが実際に向上する特
別な環境でのみ使用してください。
コンパイラは、広範囲に渡るマシンおよびアプリケー
ションで最良のパフォーマンスが得られるように先読み
のメカニズムを調整しているため、 latx:factor サブ
オプションは、パフォーマンスのテストで明らかにメ
リットがあると認められた場合にのみ使用してくださ
い。仮定される先読みの潜在期間は、リリースごとに異
なる可能性があります。したがって、リリースが変わる
たびに、潜在期間の係数 (factor) がパフォーマンスに
及ぼす影響をテストすることを、強くお勧めします。
-xprefetch_auto_type=[a]
(SPARC) a は [no%]indirect_array_access です。
このオプションは、直接メモリーアクセス用の先読み命
令の生成と同じようにして、コンパイラに
-xprefetch_level オプションの指示するループに対し
て間接先読みを生成させるかどうかを指定するのに使用
します。
-xprefetch_auto_type に値が指定されなかった場合、
コンパイラは
-xprefetch_auto_type=no%indirect_array_access に設
定します。
メモリー使用に関する別名解析のあいまいさを排除でき
る可能性が高まるため、 -xalias_level などのオプ
ションが、間接先読み命令の候補の計算の積極性、つま
りは、自動的な間接先読み命令の挿入の積極性に影響す
ることがあります。
-xprefetch_level=l
-xprefetch=auto で決定された先読み命令の自動挿入を
制御します。-xprefetch=auto を指定する場合、デフォ
ルトは -xprefetch_level=2 です。
l は 0、1、2 のいずれかです。
-xprefetch_level=1 を指定すると、先読み命令の自動
生成が可能になります。-xprefetch_level=2 を指定す
ると、レベル 1 を超える追加生成が可能になり、
-xprefetch=3 を指定すると、レベル 2 を超える追加生
成が可能になります。
最適化レベル 3 以上でコンパイルして、先読みをサ
ポートするプラットフォームのコード (v8plus、
v8plusa、v9、v9a、v9b、generic64、native64) を生成
する必要があります。
-xprofile=p
実行時プロファイルデータを収集するか、これらのデー
タで最適化を行います。
p には、 collect[:name]、 use[:name]、 tcov のいず
れかを指定します。
このオプションを使用すると、実行時に実行頻度のデー
タが収集されて保存されます。保存されたデータは以降
の処理の実行時に使用して、パフォーマンスを向上させ
ることができます。プロファイル収集はマルチスレッド
アプリケーションについても安全です。つまり、自身の
マルチタスク ( -mt ) を実行するプログラムのプロ
ファイリングは、正しい結果を生成します。このオプ
ションは -xO2 以上の最適化レベルを指定した場合にの
み有効です。
コンパイルとリンクを別の段階で行う場合、コンパイル
とリンク時には、同じ -xprofile オプションを使用し
なければなりません。
値:
collect[:name]
後でオプティマイザが -xprofile=use で使用でき
るように、実行頻度の情報を収集および保存しま
す。コンパイラは、文の実行頻度を測定するため
のコードを生成します。
name には、実行頻度のフィードバックデータを格
納する .profile ディレクトリの名前を指定しま
す。この名前の指定は省略できます。name の指定
を省略すると、実行可能プログラムの名前 (-o オ
プションで指定した名前、または -o オプション
省略時は a.out) に接尾辞 .profile を付けた名
前のサブディレクトリが、プログラムを実行した
ディレクトリに作成されます。
-xprofile=collect:name でコンパイルしたプログ
ラムによって、実行時のフィードバック情報を保
存するための name.profile ディレクトリが実行
時に作成されます。フィードバックデータは、こ
のサブディレクトリ中の feedback ファイルに保
存されます。フィードバック情報の位置は
$SUN_PROFDATA および $SUN_PROFDATA_DIR 環境変
数を使用して変更可能です。詳細については、こ
の節の最後にある 「環境変数」の項を参照してく
ださい。プログラムを複数回実行した場合、実行
頻度のフィードバックデータは feedback ファイ
ルに蓄積されるので、前回のデータは失われませ
ん。
コンパイルとリンクを別々のステップで実行する
場合、 -xprofile=collect を指定してコンパイル
されたオブジェクトファイルは、必ずリンクも
-xprofile=collect を指定して実行しなければな
りません。
use[:name]
有効な最適化を行うために実行頻度データを利用
します。
name には、フィードバックデータが格納されてい
る .profile ディレクトリの名前を指定してくだ
さい。name の指定を省略すると、a.out.profile
がフィードバックデータのあるディレクトリとみ
なされます。
-xprofile=collect でコンパイルしたプログラム
を前回実行した結果として feedback ファイルに
生成および保存された実行頻度データをもとにし
て、プログラムが最適化されます。
ソースファイル、その他のコンパイラオプション
は、feedback ファイルを生成したプリコンパイル
済みプログラムのコンパイル時に使用したオプ
ションと同じものを指定する必要があります。
-xprofile=collect:name でコンパイルした場合、
-xprofile=use:name による最適化コンパイルでは
同じ名前の name を指定する必要があります。
tcov 新しい形式の tcov を使用した基本的なブロック
カバレージ分析を行います。
-xprofile=tcov オプションは、tcov のプロファ
イルの作成に使用する新しい形式の基本ブロック
です。 -xa オプションと同じ機能がありますが、
ヘッダーファイルにソースコードが含まれている
プログラムや、C++ テンプレートを使用するプロ
グラムのデータを収集します。旧形式のプロファ
イルについての詳細は、tcov(1) のマニュアル
ページ、および『プログラムのパフォーマンス解
析』を参照してください。
コード生成は -xa オプションと同じように実行さ
れますが、.d ファイルは生成されません。代わり
に単一のファイルが生成されます。ファイル名
は、対応する実行可能ファイルの名前にもとづい
て付けられます。たとえば、myprogram というプ
ログラムを /foo/bar/myprog.profile で実行した
場合は、データファイルは
/foo/bar/myprog.profile/tcovd に格納されま
す。
-xprofile=tcov および -a オプションは、1 つの
実行可能ファイル内で両方を指定することができ
ます。すなわち、-xprofile=tcov オプションでコ
ンパイルされたファイルと、および -xa オプショ
ンでコンパイルされたファイルをリンクしてプロ
グラムを作成することができます。1 つのファイ
ルを両方のオプションを使用してコンパイルする
ことはできません。
tcov を実行する時には、新しい形式のデータが使
用されるように -x オプションを指定してくださ
い。指定しない場合、tcov は旧式の .d ファイル
(存在する場合)を使用します。この場合は、予想
外の結果が生じることがあります。
-xa オプションとは異なり、TCOVDIR 環境変数は
コンパイル時間には影響しません。ただし、
TCOVDIR 環境変数の値はプログラムの実行時に使
用されます。詳細は、tcov(1) のマニュアルペー
ジおよび『プログラムのパフォーマンス解析』を
参照してください。
注: - -xO4 を使用したために関数のインライン化
が存在する場合、 -xprofile=tcov によって生成
されるコードカバレージレポートは不正確である
可能性があります。
環境変数:
環境変数 $SUN_PROFDATA および $SUN_PROFDATA_DIR を
設定すると、 -xprofile=collect でコンパイルされた
プログラムがプロファイルデータを置く場所を制御でき
ます。上記の変数が設定されていない場合は、プロファ
イルデータは現在のディレクトリの
name.profile/feedback というファイルに保存されま
す。name は実行可能ファイルの名前、または、 -
xprofile=collect:name フラグで指定された名前に置き
換えられます。
環境変数が設定されていると、 -xprofile=collect で
収集されたデータは $SUN_PROFDATA_DIR/$SUN_PROFDATA
のディレクトリに置かれます。
これらの環境変数は、 tcov で記述されたプロファイル
データファイルのパスおよび名前も、同様に制御しま
す。詳細については、 tcov(1) のマニュアルページを
参照してください。
-xprofile_ircache[=path]
(SPARC) -xprofile_ircache[=path] を
-xprofile=collect|use とともに使用すると、collect
段階で保存されたコンパイルデータを再利用すること
で、use 段階でのコンパイル時間が改善されます。
大きなプログラムの場合、中間データが保存されている
ので、use 段階でのコンパイル時間が著しく向上しま
す。保存データによってディスクスペース要求がある程
度増えることに注意してください。
-xprofile_ircache[=path] を使用すると、path が
キャッシュ化されたファイルが保存されている場所を上
書きします。デフォルトでは、このファイルはオブジェ
クトファイルと同じディレクトリに保存されます。パス
を指定すると、collect 段階と use 段階がそれぞれ別
のディレクトリで実行される場合に便利です。
コマンドは一般的に次のような順で指定します。
example% CC -xO5 -xprofile=collect
-xprofile_ircache t1.cc t2.cc
example% a.out // run collects feedback data
example% CC -xO5 -xprofile=use -xprofile_ircache
t1.cc t2.cc
-xprofile_pathmap=collect_prefix:use_prefix
-xprofile_pathmap オプションは、-xprofile=use と共
に使用します。この -xprofile_pathmap は、以下の条
件に当てはまり、コンパイラが -xprofile=use でコン
パイルされたオブジェクトファイルのプロファイルデー
タを見つけられない場合に使います。
o 以前に -xprofile=collect でコンパイルされたディ
レクトリとは異なるディレクトリで、-xprofile=use
を指定してオブジェクトファイルをコンパイルしよ
うとする場合。
o オブジェクトファイルが、プロファイル中で共通の
ベース名を共用しているが、ディレクトリを別にし
て場所によってベース名を使い分けている場合。
collect-prefix は、-xprofile=collect を使用してオ
ブジェクトファイルがコンパイルされたディレクトリツ
リーの UNIX パス名の接頭辞です。
use-prefix は、-xprofile=use を使用してオブジェク
トファイルをコンパイルしようとしているディレクトリ
ツリーの UNIX パス名の接頭辞です。
-xprofile_pathmap に複数のインスタンスを指定した場
合、コンパイラはその指定の順序でそれらを処理してい
きます。 -xprofile_pathmap のインスタンスが指定し
た各 use-prefix は、マッチする use-prefix が特定さ
れるか、最後に指定した use-prefix がオブジェクト
ファイルのパス名と合わないことがわかるまで、オブ
ジェクトファイルのパス名と比較されます。
-xregs=r[,r...]
(SPARC プラットフォームのみ) スクラッチレジスタの
使用を制御します。
コンパイラは一時記憶領域で使用できるレジスタ (スク
ラッチレジスタ) が多いほど、高速なコードを生成でき
ます。このオプションによって、使用可能なスクラッチ
レジスタが追加されますが、追加することが適当でない
場合もあります。
r には、次の値のいずれか 1 つを指定するか、または
複数をコンマで区切って指定します。
[no%]appl
アプリケーションレジスタをスクラッチレジ
スタとして使用するコードを、コンパイラが
生成することを、許可します[しません]。ア
プリケーションレジスタは以下のものです。
g2、g3、g4 (v8a、v8、v8plus、v8plusa、
v8plusb)
g2、g3 (v9、v9a、v9b)
すべてのシステムソフトウェアおよびライブ
ラリは、-xreg=no%appl を使ってコンパイル
することを強く推奨します。システムソフト
ウェア (共用ライブラリを含む) は、アプリ
ケーションのためにレジスタの値を保持する
必要があります。レジスタの使用はコンパイ
ルシステムで制御されるよう意図されてお
り、アプリケーション全体で一貫していなけ
ればなりません。
SPARC ABI では、これらのレジスタはアプリ
ケーションレジスタと説明されています。こ
れらのレジスタを使用すると、必要なロード
およびストア命令の数が少なくなるため、パ
フォーマンスが改善されます。しかし、こう
した使用は、アセンブリコードで書かれた一
部の古いライブラリプログラムと矛盾する場
合があります。
SPARC 命令セットの詳細については -xarch
を参照してください。
[no%]float
整数値のためのスクラッチレジスタとして浮
動小数点レジスタを使用するコードを、コン
パイラが生成することを、許可します[しませ
ん]。浮動小数点の値を使用する場合、このオ
プションと関係なくこれらのレジスタが使用
される場合があります。浮動小数点レジスタ
に対するすべての参照をコードから排除した
い場合は、 -xregs=no%float を使用するのと
ともに、決して浮動小数点型をコードで使わ
ないようにする必要があります。
デフォルト:
-xregs を指定しない場合、 -xregs=appl,float が仮定
されます。
-xrestrict[=f]
(SPARC) ポインタ値型関数パラメータを制限付きポイン
タとして扱います。f は、%all か %none、%source、ま
たはコンマ区切りの1 つ以上の関数名のリストです。こ
のコマンド行オプションは単独使用できますが、最善
は、-xO3 以上の最適化レベルで使うことです。
-xrestrict=%source を指定するということは、ヘッ
ダーファイルやテンプレート定義ファイルではなく、
main ソースファイルに定義されているすべての関数を
制限付きにするということです。
このオプションで関数リストが指定された場合、指定さ
れた関数内のポインタ型パラメータは制限付きとして扱
われます。-xrestrict=%all が指定された場合は、C++
ファイル全体のすべてのポインタ型パラメータが制限付
きとして扱われます。
デフォルトは %none です。-xrestrict の指定は、
-xrestrict=%all を指定するのと同等です。
関連項目: -xprefetch_auto_type、C++ ユーザーズガイ
ドの「制限付きポインタ」
-xs オブジェクトファイルなしで dbx によるデバッグがで
きるようにします。
このオプションは、デバッグ情報すべてを実行可能ファ
イルにコピーします。dbx のパフォーマンスやそのプロ
グラムの実行時のパフォーマンスにはほとんど影響を与
えませんが、使用するディスクスペースの量は増えま
す。
-xsafe=mem
(SPARC プラットフォーム) メモリーに関するトラップ
が発生しないとみなします。
このオプションは、コンパイラが、SPARC V9 アーキテ
クチャで障害発生を想定しないロード命令を使用するこ
とを許可します。
警告:
障害発生を想定しないロード命令は、アドレス割り当て
の失敗やセグメント違反のような障害が発生した場合で
も、トラップを発生させません。そのためこのオプショ
ンは、そのような障害が起こり得ないプログラムでのみ
使用してください。メモリーに基づくトラップを発生さ
せるプログラムはごく少数なので、このオプションはほ
とんどのプログラムで安全に使用できます。しかし、例
外的な状態を処理するために、メモリーに基づいたト
ラップを明示的に使用しているプログラムでは、このオ
プションは使用しないでください。
相互の関連性:
このオプションは、 -xO5 の最適化レベルで、かつ、次
のいずれかの値をとる -xarch オプションと一緒に使用
された場合にのみ有効です。
v8plus、 v8plusa、 v8plusb、 v9、 v9a、 v9b
-xsb WorkShop ソースコードブラウザ用の情報を生成しま
す。
このオプションにより、 CC ドライバは、ソースブラウ
ザの SunWS_cache サブディレクトリにシンボルテーブ
ル情報を追加生成します。
関連項目:
-xsbfast
-xsbfast コンパイルせずに、ソースブラウザ情報だけを生成しま
す。
このオプションでは、 ccfe の段階だけを実行して、
ソースブラウザの SunWS_cache サブディレクトリにシ
ンボルテーブル情報を追加生成します。オブジェクト
ファイルは生成されません。
-xspace (SPARC プラットフォーム) コードサイズが大きくなる
ような最適化は行いません。
-xtarget=t
命令セットと最適化処理の対象システムを指定します。
このオプションはマクロです。 -xtarget の値は、
-xarch、 -xchip、および -xcache オプションの値の
セットに展開されます。fpversion(1) コマンドを使用
して、実行中のシステムの -xtarget=native の展開を
判断します。展開される値については、『C++ ユーザー
ズガイド』の -xtarget に関する項目を参照してくださ
い。
-xtarget によって、 -xarch、-xchip、 -xcache の組
み合わせを素早く簡単に指定することができます。
-xtarget は、展開されて初めて意味をなすものです。
注: あるホストプラットフォームでの -xtarget は、そ
のプラットフォームで -xtarget=native をコンパイル
したのと同じ -xarch、-xchip、-xcache の設定に展開
されない場合があります。
-xtarget=native は「-xarch=native, -xchip=native,
-xcache=native」と指定することと同じです。
-xtarget=native64 は「-xarch=native64,
-xchip=native64, -xcache=native」と指定することと
同じです。
-xtarget=generic は「-xarch=generic,
-xchip=generic, -xcache=generic」と指定することと
同じです。
-xtarget=generic64 は「-xarch=generic64,
-xchip=generic64, -xcache=generic」と指定すること
と同じです。
値:
SPARC プラットフォームの場合:
値 意味
native ホストシステムで最高のパフォーマンスを得
ることができます。
コンパイラはホストシステムで最高のパ
フォーマンスが得られるコードを生成しま
す。コンパイラが動作しているマシンで使用
できるアーキテクチャ、チップ、キャッシュ
の属性を指定します。
native64 ホストの環境 (64 ビットアーキテクチャを
想定) で、最高のパフォーマンスを得るため
のパラメータを設定します。
generic 汎用アーキテクチャ、チップ、キャッシュで
最高のパフォーマンスが得られます。
コンパイラは、-xtarget=generic を
-xarch=generic -xchip=generic
-xcache=generic に展開します。これは
デフォルト値です。
generic64 ほとんどの 64 ビットプラットフォームアー
キテクチャで、最高のパフォーマンスを得る
ためのパラメータを設定します。
platform-name
指定したシステムにおいて最高のパフォーマ
ンスが得られます。
platform-name に指定できる有効な値は、次
のとおりです。
sun4/15, sun4/20, sun4/25, sun4/30,
sun4/40, sun4/50, sun4/60, sun4/65,
sun4/75, sun4/110, sun4/150, sun4/260,
sun4/280, sun4/330, sun4/370, sun4/390,
sun4/470, sun4/490, sun4/630, sun4/670,
sun4/690, sselc, ssipc, ssipx, sslc,
sslt, sslx, sslx2, ssslc, ss1, ss1plus,
ss2, ss2p, ss4, ss4/85, ss4/110, ss5,
ss5/85, ss5/110, ssvyger, ss10,
ss10/hs11, ss10/hs12, ss10/hs14,
ss10/20, ss10/hs21, ss10/hs22, ss10/30,
ss10/40, ss10/41, ss10/50, ss10/51,
ss10/61, ss10/71, ss10/402, ss10/412,
ss10/512, ss10/514, ss10/612, ss10/712,
ss20, ss20/hs11, ss20/hs12, ss20/hs14,
ss20/hs21, ss20/hs22, ss20/50, ss20/51,
ss20/61, ss20/71, ss20/151, ss20/152,
ss20/502, ss20/512, ss20/514, ss20/612,
ss20/712, ss600/41, ss600/51, ss600/61,
ss600/120, ss600/140, ss600/412,
ss600/512, ss600/514, ss600/612, ss1000,
sc2000, cs6400, solb5, solb6, ultra,
ultra2, ultra2e, ultra2i, ultra1/140,
ultra1/170, ultra1/200, ultra2/1170,
ultra2/1200, ultra2/1300, ultra2/2170,
ultra2/2200, ultra2/2300, ultra3,
ultra3i, ultra4 entr2, entr2/1170,
entr2/2170, entr2/1200, entr2/2200,
entr150, entr3000, entr4000, entr5000,
entr6000.
プラットフォーム名についての詳細は、
『C++ ユーザーズガイド』の -xtarget に関
する項目を参照してください。
IA プラットフォームの場合:
o native
o generic
o 386 (Intel 80386 マイクロプロセッサで最高の
パフォーマンスが得られるように、コードを生
成します)
o 486 (Intel 80486 マイクロプロセッサで最高の
パフォーマンスが得られるように、コードを生
成します)
o pentium (Pentium マイクロプロセッサで最高の
パフォーマンスが得られるように、コードを生
成します)
o pentium_pro (Pentium Pro マイクロプロセッサ
で最高のパフォーマンスが得られるように、
コードを生成します)
o pentium3 (Pentium 3 マイクロプロセッサで最
高のパフォーマンスが得られるようにコードを
生成します。)
o pentium4 (Pentium 4 マイクロプロセッサで最
高のパフォーマンスが得られるようにコードを
生成します。)
新しい pentium3 および pentium4 フラグの働き
についての詳細は、このマニュアルページ先頭の
「x86 版での -xarch、-xtarget、および -xchip
のフラグの追加」を参照してください。
相互の関連性:
SPARC または UltraSPARC V9 で 64 ビット Solaris 7
または Solaris 8 ソフトウェアをコンパイルするとき
は、 -xarch=v9、 -xarch=v9a、 -xarch=v9b のいずれ
かのフラグを指定します。 -xtarget=ultra、 ultra2、
または ultra3 の指定は必要ありません (指定する場合
は、この設定では不十分です)。 -xtarget を指定する
ときは、 -xtarget の後に、 -xarch=v9、
-xarch=v9a、 -xarch=v9b のいずれかを指定する必要が
あります。たとえば、次のとおりです。
-xtarget=ultra2 ... -xarch=v9
この指定がないと、 -xtarget の指定により、 -xarch
の値が、 v8 に戻されます。
-xthreadvar[=o]
(SPARC) __thread 宣言指定子とともに働き、スレッド
ローカルな記憶領域に関するコンパイラの機能が使用さ
れます。__thread 指定子でスレッド変数を宣言した後
で、 -xthreadvar を指定すると、動的 (共用) ライブ
ラリの位置依存コード (非 PIC コード) で、スレッド
ローカルな記憶領域の使用が可能になります。__thread
の使用法の詳細については、『C++ ユーザーズガイド』
を参照してください。
値
o は次のいずれかの値です。
値 意味
[no%]dynamic
動的ロードのための変数をコンパイルします
[しません]。スレッド変数へのアクセスは、
-xthreadvar=no%dynamic の場合に著しく向
上しますが、動的ライブラリの中ではオブ
ジェクトファイルを使用できません。つま
り、実行可能ファイルの中でオブジェクト
ファイルを使用できないということです。
デフォルト
-xthreadvar を指定しないと、コンパイラの使用するデ
フォルトは、位置独立コードが有効かどうかによって異
なります。位置独立コードが有効であれば、このオプ
ションは -xthreadvar=dynamic に設定されます。位置
独立コードが有効でない場合は、オプションは
-xthreadvar=no%dynamic に設定されます。
-xthreadvar 指定して引数を指定しない場合、オプショ
ンは -xthreadvar=dynamic に設定されます。
相互の関連性
バージョンの異なる Solaris ソフトウェアでスレッド
変数を使用するには、コマンド行に異なるオプションを
指定する必要があります。
Solaris 8 ソフトウェアの場合、__thread を使うオブ
ジェクトは -mt を指定してコンパイルしなければなら
ず、また -mt -L/usr/lib/lwp -R/usr/lib/lwpsoftware
でリンクしなければなりません。
Solaris 9 ソフトウェアの場合、__thread を使うオブ
ジェクトは、 -mt を指定してコンパイルおよびリンク
しなければなりません。
警告
位置依存コードが動的ライブラリ内にある場合は、
-xthreadvar を指定しなければなりません。
リンカーは、動的ライブラリ中の位置依存コード (非
PIC) スレッド変数と同等のものをサポートできませ
ん。また、非 PIC スレッド変数は非常に高速なため、
実行可能ファイルのデフォルトとして指定できます。
関連項目
-xcode、-KPIC、-Kpic
-xtime さまざまなコンパイルパスの実行時間を報告するように
CC ドライバに指示します。
-xtrigraphs[={yes|no}]
ISO/ANSI C 標準規格で定義されているように、3 文字
表記シーケンスの認識を有効または無効にします。
-xtrigraphs=yes は、ソースコード中の 3 文字表記
シーケンスの認識を有効にします。
-xtrigraphs=no は、ソースコード中の 3 文字表記シー
ケンスの認識を無効にします。
デフォルト:
-xtrigraphs オプションの指定がない場合は、
-xtrigraphs=yes が仮定されます。
-xtrigraphs とだけ指定された場合は、
-xtrigraphs=yes が仮定されます。
-xunroll=n
可能な場合はループの展開を有効にします。
このオプションは、コンパイラがループを最適化 (展開
) するかどうかを指定します。
n を 1 にすると、コンパイラはループを展開しませ
ん。
n が 1 より大きい整数の場合、 -xunroll=n により、
コンパイラはループを n 回展開します。
-xustr={ascii_utf16_ushort|no}
このオプションは、コンパイラによる UTF-16 文字列お
よびリテラルの認識を可能にします。UTF-16 文字列お
よびリテラルは規格には取り込まれていないため、この
オプションは、規格外の C++ の認識を可能にします。
ISO10646 UTF-16 文字を使用している国際化されたアプ
リケーションサポートする必要がある場合は、
-xustr=ascii_utf16_ushort を指定してください。言い
替えれば、このオプションは、オブジェクトファイル内
に UTF-16 文字に変換する必要がある文字列がコードに
含まれている場合に使用します。このオプションを指定
しないと、コンパイラは 16 ビット文字の生成、認識の
いずれも行ないません。このオプションは、
U"ASCII_string" 文字列リテラルを符号なし
short int として認識することを可能にします。ま
た、文字リテラルの認識も可能にします。例: unsigned
short character = U'Z';
U"ASCII_string" 文字列リテラルのコンパイラによる認
識を無効にできます。コマンド行に指定された、このオ
プションの最も右側のインスタンスがそれより左のイン
スタンスすべてを上書きします。
デフォルトは -xustr=no です。-xustr を指定して引数
を指定しない場合、コンパイラはそれを受け付けず、代
わりに警告を出します。このデフォルトは、C または
C++ の規格が構文の意味を定義すれば変更できます。
-xustr=ascii_ustf16_ushort を指定して、
U"ASCII_string" 文字列リテラルを指定しない場合、そ
れはエラーにはなりません。
必ずしもすべてのファイルがこのオプションでコンパイ
ルされる必要はありません。
次に、「U」が先頭に付いた引用符で囲まれた文字列ス
トリングの例を示します。また、-xustr を指定したコ
マンド行も示します。
example% cat file.cc
const unsigned short *foo = U"foo";
const unsigned short bar[] = U"bar";
const unsigned short *fun() { return
example% CC -xustr=ascii_utf16_ushort file.cc -c
-xvector[={yes|no}]
ベクトルライブラリ関数への呼び出しの自動生成を可能
にします。このオプションを使用するときは、
-fround=nearest を指定することによって、デフォルト
の丸めモードを使用する必要があります。
-xvector=yes ループ内の数学ライブラリ呼び出しを同
等のベクトル数学ルーチンへの単純呼び出しに変換する
ことが可能な場合は、その変換を行うことを許可しま
す。こうした変換によって、ループ回数の多いループの
パフォーマンスが向上することがあります。
-xvector が省略された場合のデフォルト -xvector=no
です。 -xvector=no は、その前に指定された
-xvector=yes を取り消します。 -xvector を指定し
て、その値を指定しなかった場合のデフォルトは、
-xvector=yes です。
前に -xdepend が指定されていないコマンド行で
-xvector を使用した場合は、-xvector によって
-xdepend が有効になります。-xvector オプションはま
た、最適化レベルが指定されていないか、-O3 より低い
場合に、最適化レベルを -O3 に上げます。
コンパイラは、読み込みで libmvec ライブラリを取り
込みます。別のコマンドでコンパイルとリンクをする場
合は、リンク用の CC コマンドで必ず -xvector を使っ
てください。
-xvis (SPARC) VIS[tm] 命令セット Software Developers Kit
(VSDK) に定義されたアセンブリ言語のテンプレートを
使用するときには、 -xvis=[yes|no] コマンドを使いま
す。デフォルトは -xvis=no です。 -xvis と指定する
と -xvis=yes の意味になります。
VIS 命令セットは SPARC v9 命令セットの拡張機能で
す。UltraSPARC プロセッサは 64 ビットですが、とく
にマルチメディアアプリケーションでは、データ長が 8
ビットや 16 ビットのサイズに限られているような場合
も多くあります。VIS 命令は 4 つの 16 ビットデータ
を 1 つの命令で処理でき、したがって、イメージ、線
形代数、信号処理、オーディオ、ビデオ、ネットワーク
といった新しいメディアを扱うアプリケーションのパ
フォーマンスを大幅に向上させます。
VSDK の詳細については
http://www.sun.com/processors/vis/ を参照してくだ
さい。
-xwe ゼロ以外の終了状態を返すことによって、すべての警告
をエラーとして扱います。
-Yc,path コンポーネント c がある場所の新しいパスを指定しま
す。
コンポーネントの場所が指定された場合、その新しいパ
ス名は path/component_name になります。このオプ
ションは ld に渡されます。
値
c は次の値のいずれかです。
p cpp のデフォルトディレクトリを変更します。
0 ccfe のデフォルトディレクトリを変更します。
a fbe のデフォルトディレクトリを変更します。
2 iropt のデフォルトディレクトリを変更します
(SPARC のみ)。
c cg のデフォルトディレクトリを変更します (SPARC
のみ)。
O ipo のデフォルトディレクトリを変更します
(SPARC のみ)。
k CClink のデフォルトディレクトリを変更します。
l ld および ild のデフォルトディレクトリを変更し
ます。
f c++filt のデフォルトディレクトリを変更します。
m mcs のデフォルトディレクトリを変更します。
u ube のデフォルトディレクトリを変更します (IA
のみ)。
i ube_ipa のデフォルトディレクトリを変更します
(IA のみ)。
h ir2hf のデフォルトディレクトリを変更します (IA
のみ)。
A すべてのコンパイラコンポーネントの検索先のディ
レクトリを指定します。指定された path にコン
ポーネントが見つからなかった場合、コンパイラが
インストールされているディレクトリに戻って、検
索が行われます。
P デフォルトのライブラリ検索パスに path を追加し
ます。デフォルトのライブラリ検索パスの前に、こ
の path が調べられます。
S 起動オブジェクトファイルのデフォルトのディレク
トリを変更します。
相互の関連性
1 つのコマンド行に複数の -Y オプションを指定できま
す。1 つのコンポーネントに複数の -Y オプションが指
定されている場合は、その最後の指定が有効になりま
す。
関連項目
Solaris の『リンカーとライブラリ』
-z arg リンクエディタのオプションです。
詳細は、 ld(1) のマニュアルページおよび Solaris の
『リンカーとライブラリ』を参照してください。
PRAGMAS
以下はコンパイルシステムが認識する #pragmas です。
#pragma align
#pragma does_not_read_global_data
#pragma does_not_return
#pragma does_not_write_global_data
#pragma dump_macros
#pragma end_dumpmacros
#pragma fini
#pragma hdrstop
#pragma ident
#pragma init
#pragma rarely_called
#pragma returns_new_memory
#pragma unknown_control_flow
#pragma weak
SPARC のみ:
#pragma no_side_effect
#pragma pack
これらのプラグマの詳細については、『C++ ユーザーズガイド』を
参照してください。
注意事項
C++ コンパイラには、静的ライブラリの libC.a および libCrun.a
が含まれています。ただし、それらに対応する、バンドルされてい
る共有ライブラリの libC.so.5 および libCrun.so.1 は、バー
ジョン 8 および 9 の Solaris オペレーティングシステムの C++
コンパイラと同期がとられていません。コンパイラが Solaris 8
および 9 オペレーティングシステムの共有ライブラリと正しく連
携するには、適切な OS パッチをインストールする必要がありま
す。C++ FAQ のパッチの一覧を参照するか、www.sunsolve.com に
移動して、libCrun を検索してください。検索範囲を「Search」リ
ストボックスのデフォルトである「All Sun Internal Collec-
tions」ではなく、「Patch Descriptions」に絞って検索してくだ
さい。
ファイル
file.a 静的ライブラリ
file.C 入力ファイル
file.cc 入力ファイル
file.c++ 入力ファイル
file.cpp 入力ファイル
file.cxx 入力ファイル
file.o オブジェクトファイル
file.so 動的 (共有) ライブラ
リ
a.out リンク後の出力
関連項目
analyzer(1)、 as(1)、 c++filt(1)、 cc(1)、 csh(1)、 dbx(1)、
gprof(1)、 ild(1)、 ld(1)、 more(1)、 nm(1)、 prof(1)、
tcov(1)
『C++ ユーザーズガイド』
『C++ 移行ガイド』
『プログラミング言語 C++』第 2 版、B. Stroustrup 著、トッパ
ン
『プログラミング言語 C』第 2 版、B.W. Kernighan、D.M. Richie
共著、共立出版
Solaris の『リンカーとライブラリ』
『International Standard (ISO/IEC FDIS 14882)』の 「Program-
ming Languages - C++」