Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

CC(1)

名前

CC - C++ コンパイラ

形式

CC   [-#]  [-###]  [-B{dynamic|static|symbolic}] [-c]
     [-compat[={5|g}]] [+d] [-Dname[=def]] [-d{y|n}]
     [-dalign]  [-dryrun] [-E] [-erroff[=t[,t...]]]
     [-errtags[=a]] [-errwarn[=t[,t...]]] [-fast]
     [-features=a[,a...]] [-filt[=filter[,filter...]]
     [-flags] [-fma[={none|fused}]] [-fnonstd]
     [-fns[={yes|no}]] [-fopenmp] [-fprecision=a]
     [-fround=a] [-fsimple[=n]] [-fstore] [-ftrap=a[,a...]]
     [-G] [-g] [-g[n]] [-H] [-h[ ]lname] [-help]
     [-Ipathname] [-I-] [-i] [-include] [-inline]
     [-instances=i] [-instlib=file] [-KPIC] [-Kpic]
     [-keeptmp] [-Lpath] [-llib] [-libmieee] [-libmil]
     [-library=lib[,lib...]] [-m32|-m64] [-mc] [-misalign]
     [-mr[,string]] [-mt] [-native] [-noex] [-nofstore]
     [-nolib] [-nolibmil] [-noqueue] [-norunpath] [-O[n]]
     [-O[level]] [-o file] [+p] [-P] [-p] [-pentium] [-pg]
     [-PIC] [-pic] [-preserve_argvalues[=int|none]] [-pta]
     [-ptipath] [-pto] [-ptv]
     [{-Qoption|-qoption} phase [,option...]]
     [{-Qproduce|-qproduce}type] [-qp] [-Rpath[:path...]]
     [-S] [-s] [-staticlib=l[,l...]] [-std=v]
     [-sync_stdio=[yes|no]] [-temp=path]
     [-template=a[,a...]] [-time] [-traceback[=list]]
     [-Uname] [-unroll=n] [-V] [-v] [-verbose=a[,a...]]
     [-Wc,arg] [+w] [+w2] [-w] [-Xlinker arg] [-Xm]
     [-xaddr32[={yes|no}]] [-xalias_level[=n]]
     [-xanalyze={code|no}] [-xannotate[={yes|no}]] [-xar]
     [-xarch=isa] [-xautopar] [-xbinopt={a}]
     [-xbuiltin[={a}] [-xcache=c] [-xchar[=o]] [-xcheck[=n]]
     [-xchip=c] [-xcode=v] [-xdebugformat=[stabs|dwarf]]
     [-xdebuginfo=a[,a...]] [-xdepend[={yes|no}]]
     [-xdumpmacros[=value[,value...]] [-xe] [-xF[=v]]
     [-xglobalize[={yes|no}]] [-xhelp=flags]
     [-xhwcprof[={enable|disable}]] [-xia]
     [-xinline[=func_spec[,func_spec...]]
     [-xinline_param=a[,a[,a]...]] [-xinline_report[=n]]
     [-xinstrument=[no%]datarace] [-xipo[={0|1|2}]
     [-xipo_archive[=a]] [-xipo_build=[yes|no]]
     [-xivdep[=p]] [-xjobs=[n|auto]]
     [-xkeep_unref[={[no%]funcs,[no%]vars}]]
     [-xkeepframe[=p]] [-xlang=language[,language]]
     [-xldscope=[v]] [-xlibmieee] [-xlibmil] [-xlibmopt]
     [-xlic_lib=sunperf] [-xlicinfo] [-xlinkopt[=level]]
     [-xloopinfo] [-xM] [-xM1] [-xMD] [-xMF] [-xMMD]
     [-xMerge] [-xmaxopt[=v]]  [-xmemalign=ab] [-xmodel=[a]]
     [-xnolib]  [-xnolibmil] [-xnolibmopt] [-xOn]
     [-xopenmp[=i]] [-xpagesize=n] [-xpagesize_heap=n]
     [-xpagesize_stack=n]
     [-xpatchpadding[={fix|patch|size}]] [-xpch=v]
     [-xpchstop] [-xpec] [-xpg] [-xport64[=v]]
     [-xprefetch[=a[,a]] [-xprefetch_auto_type=[a]
     [-xprefetch_level[=l]] [-xprevise={yes|no}] [-xprofile=p]
     [-xprofile_ircache[=path]]
     [-xprofile_pathmap=collect_prefix:use_prefix]
     [-xreduction] [-xregs=r[,r...]] [-xrestrict[=f]]
     [-xs[={yes|no}]] [-xsafe=mem] [-xsegment_align=n] [-xspace]
     [-xtarget=t] [-xtemp=path] [-xthreadvar[=o]]
     [-xthroughput[={yes|no}]] [-xtime]
     [-xtrigraphs[={yes|no}]] [-xunboundsym={yes|no}]
     [-xunroll=n] [-xustr={ascii_utf16_ushort|no}]
     [-xvector[=a]] [-xvis] [-xvpara] [-xwe] [-Yc,path]
     [-z arg] [file] ...

説明

Oracle Solaris Studio 12.4 C++ コンパイラ。

このマニュアルページでは、Oracle Solaris Studio 12.4 C++ コンパイラのオプションまたはフラグについて詳細に説明します。

このリリースの完全なドキュメントは、Oracle Technical Network (OTN) Solaris Studio の Web サイトで入手できます。

http://oracle.com/technetwork/server-storage/solarisstudio

OTN Web サイトには Oracle Solaris Studio の完全なリソースがあり、ベストプラクティス、さまざまなプログラミングテクノロジの詳細、およびその他のトピックからなる多数の技術的な記事が含まれています。

Oracle Solaris Studio スイートのすべての新機能の完全な説明については、『このリリースの新機能ガイド』を参照してください。

このマニュアルページは、定義上はクイックリファレンスです。C++ コンパイラとそのオプションの詳細は、『C++ ユーザーズガイド』を参照してください。

64 ビットプラットフォーム用のコンパイル

ターゲットコンパイルのメモリーモデル (ILP32 または LP64) を指定するには、それぞれ -m32 および -m64 オプションを使用します。

-xarch オプションには、暗黙的なメモリーモデル定義が含まれなくなったため、ターゲットプロセッサの命令セットを指定するためのみに使用してください。

ILP32 モデルは、C 言語の int、long、およびポインタデータ型がすべて 32 ビット拡張であることを指定します。long およびポインタデータ型を指定する LP64 モデルは、すべて 64 ビット拡張です。Oracle Solaris および Linux OS は、LP64 メモリーモデルの大きなファイルや大きな配列もサポートします。

-m64 を使用してコンパイルを行う場合、結果の実行可能ファイルは、64 ビットカーネルを実行する Oracle Solaris OS または Linux OS の 64 ビット SPARC または x86 プロセッサでのみ動作します。64 ビットオブジェクトのコンパイル、リンク、および実行は、64 ビット実行をサポートする Oracle Solaris または Linux OS でのみ行うことができます。

x86 の特記事項

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

-xarchssesse2、sse2a、または sse3 以上に設定してコンパイルされたプログラムは、それらの拡張機能が備わったプラットフォームでのみ実行する必要があります。

このリリースでは、デフォルトの命令セットおよび -xarch=generic の意味が sse2 に変更されました。ターゲットプラットフォームオプションを指定せずにコンパイルすると、古い Pentium III または以前のシステムと互換性がない sse2 バイナリが生成されます。

コンパイルとリンクを別々に行う場合は、必ずコンパイラを使ってリンクし、同じ -xarch 設定で正しい起動ルーチンがリンクされるようにしてください。

-xarch=pentium_pro または -xarch=sse での数値の結果は、x86 の 80 ビットの浮動小数点レジスタの影響で、SPARC での結果と異なる場合があります。この差を最小にするには、-fstore オプションを使用するか、デフォルトの -xarch=sse2 を指定してコンパイルします。

組み込み数学ライブラリ (sin(x) など) が異なるため、Oracle Solaris と Linux の間でも数値結果が異なることがあります。

バイナリの互換性の妥当性検査

特殊化された -xarch ハードウェアフラグを使用してコンパイルおよび作成されたプログラムバイナリは、適切なプラットフォームで実行されているかどうかが検証されます。特殊化された -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。

ただし、Linux ではそのような検証は行われません。古いハードウェアプラットフォームの Oracle Solaris Studio のコンパイラでコンパイルされたバイナリオブジェクトを実行すると、ランタイムエラーになることがあります。Linux では、それらのバイナリを適切なハードウェアプラットフォームにデプロイすることはユーザーの責任です。

この警告は、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、SSE3 (およびそれ以降の) 命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。

C++ コンパイラの概要

CC は、C++ およびアセンブリソースファイルをオブジェクトファイルに変換し、それらのオブジェクトファイルとライブラリを実行可能プログラムにリンクします。

C++ オブジェクトを含むプログラムは、CC でリンクする必要があります。

CC は、C++ ソースプログラムとして .c.C.cc.cxx.c++.cpp、または .i で終わる引数を取ります。.s で終わる引数は、アセンブリソースファイルであると見なされます。.o で終わる引数は、オブジェクトファイルであると見なされます。

名前が上の接尾辞で終わらないファイルは、オブジェクトプログラムまたはライブラリとして扱われ、リンクエディタに渡されます。-c-S-E、または -P が指定されていないかぎり、これらのプログラムとライブラリは、指定されたすべてのコンパイルまたはアセンブリの結果とともに、指定された順序でリンクされて a.out という名前の出力ファイルを生成します。-o オプションを使用して、実行可能ファイルに別の名前を指定できます。

1 つのファイルが一度にすべてコンパイルおよびリンクされる場合、中間ファイルは削除されます。

CC コマンドを使用する前に、C++ コンパイルシステムのインストール先として選択したディレクトリの名前を検索パスに挿入します。検索パスを設定する手順については、csh(1) または sh(1) のマニュアルページを参照してください。

ユーザー指定のデフォルトコンパイラオプション起動ファイル

これらのデフォルトコンパイラオプションファイルは、ユーザーがすべてのコンパイルに適用される (ほかの方法で上書きされる場合を除く)、一連のデフォルトオプションを指定することを許可します。たとえば、ファイルによって、すべてのコンパイルのデフォルトを -xO2 としたり、またはファイル setup.il を自動的に含めたりするように指定できます。

コンパイラは起動時に、すべてのコンパイルに含めるべきデフォルトオプションがリストされているデフォルトオプションファイルを検索します。環境変数 SPRO_DEFAULTS_PATH は、デフォルトファイルを検索するディレクトリのコロン区切りリストを指定します。

環境変数が設定されていない場合、標準のデフォルトセットが使用されます。環境変数が設定されているが空の場合、デフォルトは使用されません。

デフォルトファイルの名前は compiler.defaults の形式である必要があります。compilercc、c89、c99、CC、ftn、または lint のいずれかです。たとえば、C++ コンパイラでのデフォルトは CC.defaults になります。

コンパイラ用のデフォルトファイルが SPRO_DEFAULTS_PATH に一覧表示されているディレクトリ内で見つかった場合、コンパイラはコマンド行のオプションを処理する前に、このファイルを読み込んでオプションを処理します。最初に見つかったデフォルトファイルが使用され、検索は終了します。

システム管理者は、システム全体のデフォルトファイルを Studio-install-path/prod/etc/config に作成できます。環境変数が設定されている場合、インストールされたデフォルトファイルは読み取られません。

デフォルトファイルの形式はコマンド行と同様です。ファイルの各行には、1 つ以上のコンパイラオプションを空白で区切って含めてもかまいません。ワイルドカードや置換などのシェル展開は、デフォルトファイル内のオプションには適用されません。

—#、—###、および —dryrun の各オプションによって生成される詳細出力では、SPRO_DEFAULTS_PATH の値と、完全展開されたコマンド行が表示されます。

ユーザーによってコマンド行で指定されたオプションは、通常、デフォルトファイルから読み取られたオプションをオーバーライドします。たとえば、—xO4 でのコンパイルがデフォルトファイルで指定されており、ユーザーがコマンド行で —xO2 を指定した場合、—xO2 が使用されます。

デフォルトオプションファイルに記載されているオプションの一部は、コマンド行で指定されたオプションのあとに付加されます。これらは、プリプロセッサオプション —I、リンカーオプション —B、—L、—R —l、および、ソースファイル、オブジェクトファイル、アーカイブ、共有オブジェクトなどのすべてのファイル引数です。

次に示すのは、ユーザー指定のデフォルトコンパイラオプション起動ファイルがどのように使用される可能性があるかの例です。

 
demo% cat /project/defaults/CC.defaults
-fast -I/project/src/hdrs -L/project/libs -llibproj -xvpara
demo% setenv SPRO_DEFAULTS_PATH /project/defaults
demo% CC -c -I/local/hdrs -L/local/libs -lliblocal tst.cc

コンパイラコマンドは次と同等になります。

 
CC -fast -xvpara -c -I/local/hdrs -L/local/libs -lliblocal \
       tst.cc -I/project/src/hdrs -L/project/libs -llibproj

コンパイラデフォルトファイルはプロジェクト全体のデフォルトを設定するための便利な方法ですが、問題の診断を困難にする原因になる場合もあります。このような問題を回避するには、環境変数SPRO_DEFAULTS_PATHを現在のディレクトリではなく絶対パスに設定します。

デフォルトオプションファイルのインタフェース安定性はコミットされていません。オプション処理の順序は、将来のリリースで変更される可能性があります。

オプション

すべてのプラットフォームに共通のオプションは、すべてのプラットフォームで暗黙的に受け入れられます。この規則の例外は、個別のオプションに記述されています。

SPARC プラットフォームでのみ有効なオプションは (SPARC) とマークされています。x86/x64 プラットフォームでのみ有効なオプションは (x86) とマークされています。

非推奨のオプションは(廃止)とマークされており、今後は使用しないでください。これらは、以前のリリースとの互換性のためにのみ提供されています。代わりに示されているオプションを使用してください。

リンカーのオプションについては、ld(1) を参照してください。

コマンド行オプションの構文では、角括弧 ( [] ) の項目はオプションです。選択するリテラル項目をバーで区切ったリストは、{yes | no | maybe } のように、中括弧で囲まれています。値なしでフラグが表示されている場合は、通常、リストの最初の項目がデフォルト値を示しています。

たとえば、-someoption[={no|yes}] は -someoption-someoption=no と同じであることを意味します。

一般に、コンパイラオプションは左から右に処理され (ただし、-U オプションがすべての -D オプションのあとに処理される点は例外です)、マクロオプション (ほかのオプションを含むオプション) を選択的にオーバーライドできるようにします。この規則はリンカーのオプションには適用されません。

例を含む C++ コンパイラオプションの詳細な説明については、『C++ ユーザーズガイド』を参照してください。

CC は、次のオプションを受け入れます。

-#

冗長モードをオンにして、コマンドオプションが展開された状態を示します。要素が呼び出されるごとにその要素を表示します。

-###

呼び出される各コンポーネントを表示しますが、それらのコンポーネントは実際には実行しません。また、コマンドオプションの展開内容を表示します。

-Bbinding

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

-Bdynamic がデフォルトです。-B オプションは、コマンド行で複数回使用できます。

-Bbinding オプションの詳細は、ld(1) のマニュアルページおよび Oracle Solaris のドキュメントを参照してください。

-Bdynamic は、リンクエディタに liblib.so ファイルを探すよう指示します。ライブラリのリンク方式を共有にしたい場合は、このオプションを指定します。liblib.so ファイルが見つからない場合、リンカーは liblib.a ファイルを探します。

-Bstatic は、リンクエディタに liblib.a ファイルのみを探すよう指示します。 .a 接尾辞は、このファイルが静的 (つまり、非共有) であることを示します。ライブラリのリンク形式を非共有にしたい場合は、このオプションを指定します。

-Bsymbolic は、シンボルがほかですでに定義されている場合でも、可能であればシンボルを共有ライブラリ内で強制的に解決します。-Bsymbolic については、ld(1) のマニュアルページを参照してください。

このオプションとその引数は、リンカー ld に渡されます。コンパイルとリンクを別の手順で行うときに -Bbinding オプションを使用する場合は、そのオプションをリンクの手順に含める必要があります。

警告:

C++ コードが含まれているプログラムでは -Bsymbolic を使用せず、代わりにリンカースコープを使用してください。リンカースコープの詳細は、『C++ ユーザーズガイド』を参照してください。-xldscope オプションも参照してください。

-Bsymbolic を使用すると、異なるモジュール内の参照が、本来 1 つのグローバルオブジェクトの複数の異なる複製に結合されてしまう可能性があります。

例外メカニズムは、アドレスの比較によって機能します。何かのコピーが 2 つある場合は、それらのアドレスが等しくならないため、一意のアドレスであると想定されているものの比較に依存する例外メカニズムが失敗することがあります。

-c

各ソースファイルの .o ファイルをリンクせずにコンパイルおよび生成します。-o オプションを使用すると、1 つのオブジェクトファイルを明示的に指定できます。コンパイラが各入力ファイルに対応するオブジェクトコードを生成する場合は、現在の作業ディレクトリにオブジェクトファイルを作成します。リンクを行わないと、オブジェクトファイルの削除も行われません。

次に例を示します。

  • CC -c x.cc は、オブジェクトファイル x.o を生成します。

  • CC -c -o y.o x.cc は、オブジェクトファイル y.o を生成します。

警告:

コンパイラは、入力ファイル (.cc.c.i など) のオブジェクトコードを生成する場合、常に .o ファイルを作業ディレクトリ内に生成します。リンク手順を省略すると、この .o ファイルは削除されません。

関連項目: -o filename

-compat={5|g}

コンパイラの互換モードを設定します。-compat オプションで、このモード (5 または g) を指定する必要があります。新しい -std オプションが推奨されており、より多くの選択肢を提供します。

-compat=5 モードは、2003 年に修正された ANSI/ISO 1998 C++ 標準に記載されている言語を実装しており、Oracle Solaris Studio 12.4 のリリースではデフォルトです。(「互換モード」である -compat=4 は、Oracle Solaris Studio 12.3 で削除されました。)

-compat=g モードは、同じ標準に準拠し、すべての Oracle Solaris および Linux プラットフォーム上の gcc/g++ コンパイラとの互換性を提供します。

-compat=5

C++ 5.0 から 5.12 と互換性のある Sun ABI を使用して C++03 ダイアレクトを選択します。__SUNPRO_CC_COMPAT プリプロセッサマクロを 5 に設定します。これは -std=sun03 と同等です。

-compat=g

いくつかの g++ 言語拡張の認識を有効にし、コンパイラで Oracle Solaris および Linux プラットフォーム上の g++ とバイナリ互換のあるコードが生成されるようにします。これは -std=c++03 と同等です。

使用される gcc ヘッダーおよびライブラリは、システムにインストールされている gcc のバージョンではなく、コンパイラにより提供されるものです。

バイナリ互換性は、共有 (動的、つまり .so) ライブラリにのみ拡張され、個々の .o ファイルまたはアーカイブ (.a) ライブラリには拡張されません。

__SUNPRO_CC_COMPAT プリプロセッサマクロを 'G' に設定します。

例 1: g++ 共有ライブラリの Oracle Solaris Studio C++ メインプログラムへのリンク

 
% g++ -shared -o libfoo.so -fpic a.cc b.cc c.cc
% CC -compat=g main.cc -L. -lfoo

例 2: Oracle Solaris Studio C++ 共有ライブラリの g++ メインプログラムへのリンク

 
% CC -compat=g -G -o libfoo.so -Kpic a.cc b.cc c.cc
% g++ main.cc -L. -lfoo

デフォルト:

-compat オプションも -std オプションも指定されていない場合は、-compat=5 であると見なされます。

相互の関連性:

-compat オプションと -std オプションを同じコマンド行で指定することはできません。

詳細は、-features を参照してください。

+d

コンパイラで C++ インライン関数が展開されないようにします。

C++ 言語の規則では、C++ インライン関数は、次のいずれかの文が当てはまる関数です。

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

  • 関数が、(宣言されているだけでなく) クラス定義内で定義されています。

  • 関数は、コンパイラで生成されたクラスメンバー関数です。

C++ 言語の規則では、呼び出しを実際にインライン化するかどうかをコンパイラが選択します。C++ コンパイラは、次のいずれかに当てはまらないかぎり、呼び出しをインライン関数にインライン化します。

  • 関数が複雑すぎます。

  • +d オプションが選択されています。

  • 最適化オプションなしで -g オプションが選択されています。

相互の関連性:

このオプションは、-O または -xO の最適化レベルも同時に指定されていないかぎり、デバッグオプション -g を指定すると自動的に有効になります。

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

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

-Dname[=def]

プリプロセッサへのマクロシンボル name を定義します。これは、ソースの先頭に #define 指令を含めることと同等の操作です。複数の -D オプションを使用できます。

次の値が事前に定義されています。

SPARC および x86 プラットフォーム:

__ARRAYNEW
__BUILTIN_VA_ARG_INCR
__DATE__
__FILE__
__LINE__
__STDC__ = 0
__SUNPRO_CC = 0x5130
__SUNPRO_CC_COMPAT = 5 or G
__TIME__
__cplusplus
__has_attribute
__sun
__unix
_BOOL if type bool is enabled (see "-features=[no%]bool")
_WCHAR_T
sun
unix
__SVR4 (Oracle Solaris)
__SunOS_5_10  (Oracle Solaris)
__SunOS_5_11  (Oracle Solaris)

注: __has_attribute は関数形式のマクロです。

SPARC のみ:

sparc
sparcv8
__SUN_PREFETCH = 1
__sparc

SPARC V9 のみ:

__sparcv9 (with -m64)

x86 のみ:

linux
__amd64 (with -m64)
__gnu__linux__
__linux
__linux__
__x86_64 (with -m64)

__sun は、Oracle Solaris プラットフォーム上でのみ定義されていることに注意してください。コンパイラが Oracle Solaris Studio CC コンパイラかどうかを確認するには、__SUNPRO_CC を使用します。

デフォルト:

[=def] を使用しない場合、name は 1 として定義されます。

相互の関連性:

+p が使用されている場合、sun、unix、sparc、および i386 は定義されません。

-d{y|n}

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

-dy は、リンクエディタでの動的リンク (デフォルト) を指定します。

-dn はリンクエディタに静的なリンクを指定します。

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

相互の関連性:

このオプションを動的ライブラリと組み合わせて使用すると、重大なエラーが発生します。ほとんどのシステムライブラリは、動的ライブラリでのみ使用できます。

-dalign

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xmemalign=8s を使用してください。廃止されたオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

このオプションは、x86/x64 プラットフォーム上では暗黙的に無視されます。

-dryrun

CC ドライバに、コンパイルドライバによって構築されたコマンドを実行するのではなく、表示するよう指示します。

-E

CC ドライバに、C++ ソースファイルの前処理のみを行い、その結果を stdout (標準出力) に送信するよう指示します。コンパイルは行われません。したがって .o ファイルは生成されません。

このオプションを使用すると、プリプロセッサで作成されるような行番号情報が出力に含まれます。

ソースコードにテンプレートが含まれているときに -E オプションの出力をコンパイルするには、-E オプションとともに -template=no%extdef オプションを使用することが必要になる場合があります。アプリケーションコードで「定義分離」テンプレートのソースコードモデルが使用されている場合は、-E オプションの出力が引き続きコンパイルされない可能性があります。詳細は、『C++ ユーザーズガイド』のテンプレートに関する章を参照してください。

-erroff[=t[,t...] ]

コンパイラの警告メッセージを抑止しますが、エラーメッセージは抑止しません。このオプションは、-errwarn でゼロ以外の終了ステータスを発生させるように指定されているかどうかにかかわらず、すべての警告メッセージに適用されます。

値:

-erroff の値は、次の 1 つ以上の値で構成されるコンマ区切りのリストのメンバーです。

tag

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

no%tag

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

%all

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

%none

すべてのメッセージの抑制を解除します。これはデフォルト値です。

指定順序によって実行内容が異なります。たとえば、「%all,no%tag」と指定すると、tag 以外のすべての警告メッセージを抑制します。

デフォルト:

デフォルトは -erroff=%none で、-erroff を指定すると -erroff=%all と指定した場合と同様の結果が得られます。

警告:

-erroff オプションで無効にできるのは、C++ コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。

-errtags [ = a]

C++ コンパイラのフロントエンドの警告メッセージのうち、-erroff オプションで抑制できるか、または -errwarn オプションで致命的エラーに変換できる各警告メッセージのメッセージタグを表示します。C++ コンパイラドライバや C++ コンパイルシステムのその他のコンポーネントからのメッセージにはエラータグが含まれていないため、-erroff で抑制したり、-errwarn で致命的エラーに変換したりすることはできません。

値とデフォルト値:

a には yes または no を指定できます。デフォルトは -errtags=no です。-errtags を指定することは -errtags=yes を指定することと同等です。

以前の C++ コンパイラでは、-errtags オプションにより、タグが警告とエラーの両方のメッセージの一部として出力されました。C++ コンパイラの動作は現在、C コンパイラと同じく、警告メッセージに対してのみタグを発行します。

-errwarn [ = t[,t...]]

特定の警告メッセージに対して C++ コンパイラを障害ステータスで終了させるには、-errwarn オプションを使用します。

値:

t には、次の 1 つまたは複数の項目をコンマで区切って指定します。tagno%tag%all%none。このときの順序が重要です。たとえば、%all,no%tag は、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 を指定してエラーなしでコンパイルされるコードでも、コンパイラの次期リリースではエラーを出力してコンパイルされる可能性があります。

C++ コンパイラを障害ステータスで終了させるために -errwarn オプションで指定できるのは、C++ コンパイラのフロントエンドからの警告メッセージのうち、-errtags オプションが使用されたときにタグを表示する警告メッセージだけです。

関連項目: -erroff-errtags

-fast

このオプションはマクロであり、実行可能ファイルが実行時に最適なパフォーマンスになるようにチューニングするための出発点として効果的に使用できます。-fast の展開は、あるリリースのコンパイラと次のリリースで違いがある場合やターゲットプラットフォーム固有のオプションが含められている場合があります。-fast の展開を検査し、実行可能ファイルをチューニングする進行中のプロセスに -fast の適切なオプションを組み込むには、-dryrun オプションを使用します。

-fast を指定してコンパイルしたモジュールは、-fast を指定してリンクする必要があります。コンパイル時とリンク時の両方で指定する必要のあるコンパイラオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

-fast の展開には、コンパイラが最適化された数学ルーチンのライブラリを使用できるようにする -xlibmopt オプションが含まれます。詳細は、このマニュアルページの -xlibmopt の説明を参照してください。

このオプションは、次のコンパイルオプションを展開することによって、ほとんどのアプリケーションでほぼ最大のパフォーマンスを提供します。

-fma=fused (SPARC, x86)
-fns (SPARC, x86)
-fsimple=2 (SPARC, x86)
-nofstore (x86)
-xbuiltin=%all (SPARC, x86)
-xdepend (SPARC, x86)
-xlibmil (SPARC, x86)
-xlibmopt (SPARC, x86)
-xmemalign (SPARC)
-xO5 (SPARC, x86)
-xregs=frameptr (x86)
-xtarget=native (SPARC, x86)

コンポーネントオプションフラグのこの選択内容は、各リリースのコンパイラで変更される可能性があります。-fast オプションの展開は、次のコマンドを実行することによって表示できます。

CC -fast -xdryrun |& grep ###

-fast によって設定されるオプションの詳細は、『C++ ユーザーズガイド』を参照してください。

相互の関連性:

-fast によって設定される値は、コマンド行で -fast の右に別の値を指定することによってオーバーライドできます。たとえば、-fast によって設定される最適化レベルは -xO5 ですが、-fast-xO3 の順に指定すると、最適化レベルは -xO3 になります。

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

誤:

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

正:

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

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

警告:

-fast オプションでコンパイルされたコードには移植性がありません。たとえば、UltraSPARC(TM) III システム上で次のコマンドを使用してコードをコンパイルすると、UltraSPARC II システム上では実行されないバイナリが生成されます。

example% CC -fast test.cc

IEEE 規格の浮動小数点例外処理に依存するプログラムにはこのオプションを使用しないでください。異なる数値結果、プログラムの途中終了、予期しない SIGFPE シグナルなどが発生する可能性があります。

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

x86 では、-fast オプションに -xregs=frameptr が含まれます。特に C、Fortran、および C++ の混合ソースコードをコンパイルする場合は、その詳細について、-xregs=frameptr の説明を参照してください。

-fast オプションの展開には、-D_MATHERR_ERRNO_DONTCARE が含まれます。

関連項目:

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

-features=a

さまざまな C++ 言語機能を有効または無効にします。

次の表に、-features サブオプションの各キーワードとその意味を示します。サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

%all

非推奨。%all を使用しないでください。下記の警告を参照してください。

%none

非推奨。%none を使用しないでください。下記の警告を参照してください。

[no%]altspell

トークンの代替スペル (&& に対する and など) を認識します。デフォルトは altspell です。

[no%]anachronisms

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

[no%]bool

bool 型とリテラルを許可します。有効になっている場合は、マクロ _BOOL = 1 です。無効になっている場合、マクロは定義されません。デフォルトは bool です。

[no%]conststrings

リテラル文字列を読み取り専用メモリー内に配置します。デフォルトは conststrings です。

cplusplus_redef

通常は事前に定義されているマクロ __cplusplus を、コマンド行で -D オプションによって再定義できるようにします。ソースコードで #define 指令を使用して __cplusplus の再定義を試みることは許可されていません。

例:

CC -features=cplusplus_redef -D__cplusplus=1 ...

g++ コンパイラは通常、__cplusplus マクロを 1 に事前に定義するため、ソースコードがこの非標準の値に依存している可能性があります。(標準の値は、1998 年の C++ 標準または 2003 年の更新を実装しているコンパイラを示す 199711L です。将来の標準では、このマクロにより大きな値が必要になります。)

このオプションは、g++ 用のコードをコンパイルするために __cplusplus を 1 に再定義する必要がないかぎり使用しないでください。

[no%]except

C++ 例外を許可します。C++ 例外が無効になっている (つまり、-features=no%except である) 場合、関数でのスロー指定は受け入れられますが、無視されます。コンパイラは例外コードを生成しません。キーワード trythrow、および catch は常に予約されています。デフォルトは except です。

explicit

キーワード explicit を認識します。no%explicit は許可されません。

[no%]export

キーワード export を認識します。デフォルトは export です。

[no%]extensions

ほかの C++ コンパイラによって一般に受け入れられる非標準のコードを許可します。-features=extensions オプションを使用したときにコンパイラによって受け入れられる無効なコードについては、『C++ ユーザーズガイド』の第 4 章を参照してください。デフォルトは -features=no%extensions です。

[no%]iddollar

初期以外の識別子文字として $ を許可します。デフォルトは no%iddollar です。

[no%]localfor

for 文に対する標準に準拠したローカルスコープの規則を使用します。デフォルトは localfor です。

[no%]mutable

キーワード mutable を認識します。デフォルトは mutable です。

namespace

キーワード namespace を認識します。no%namespace は許可されません。

[no%]nestedaccess

入れ子のクラスから包含するクラスの private メンバーにアクセスできるようにします。デフォルトは -features=nestedacces です。

[no%]rvalueref

非定数参照の右辺値または一時値へのバインドを許可します。デフォルトは -features=no%rvalueref です。C++ コンパイラは従来より、非定数参照を一時値または右辺値にバインドできないという規則の適用に厳格ではありませんでした。C++ コンパイラは、デフォルトでは無効なコードを受け入れます。古いコンパイラの動作に復元するには、オプション -features=rvalueref を使用します。

[no%]rtti

実行時の型識別 (RTTI) を許可します。

[no%]split_init

ローカルではない静的オブジェクトの初期化子を個々の関数に配置します。-features=no%split_init を使用した場合、コンパイラは、すべての初期化子を 1 つの関数内に配置します。-features=no%split_init を使用すると、コンパイル時間が可能なかぎり費やされて、コードサイズが最小限に抑えられます。デフォルトは split_init です。

[no%]strictdestorder

静的ストレージの期間でのオブジェクトの破棄の順序に関連した C++ 標準で指定されている要件に従います。デフォルトは strictdestrorder です。

[no%]tmplife

ANSI/ISO C++ 標準で定義されている、完全な式の最後にある式によって作成された一時オブジェクトをクリーンアップします。(-features=no%tmplife が有効である場合、ほとんどの一時オブジェクトは、そのブロックの最後にクリーンアップされます)。デフォルトは tmplife です。

[no%]tmplrefstatic

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

[no%]transitions

標準 C++ で問題があるため、プログラムが予想とは異なった方法で動作したり、将来のコンパイラによって拒否されたりする原因となる可能性のある ARM 言語構造を許可します。-features=no%transitions を使用すると、コンパイラはエラーメッセージの代わりに、これらの構造に関する警告を発行します。

相互の関連性:

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

次の値の使用は、標準ライブラリやヘッダーと互換性がありません。

  • no%bool

  • no%except

  • no%mutable

警告:

-features=%all または -features=%none を使用しないでください。これらのサブオプションは非推奨であり、将来のリリースで削除される可能性があります。結果は予測できない場合があります。

-features=tmplife を使用すると、プログラムの動作が変化する可能性があります。-features=tmplife オプションを指定してもしなくてもプログラムが機能するかどうかのテストは、そのプログラムの移植性をテストする 1 つの方法になります。

-filt[=filter[,filter...]]

CC が通常はリンカーのエラーメッセージに適用するフィルタを抑制します。

サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

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

関連項目: c++filt (1) 。

-flags

-xhelp=flags と同じです。

-fma[={none|fused}]

浮動小数点の積和演算 (FMA) 命令の自動生成を有効にします。-fma=none を指定すると、これらの命令の生成を無効にします。-fma=fused を指定すると、コンパイラは浮動小数点の積和演算 (FMA) 命令を使用して、コードのパフォーマンスを改善する機会を検出しようとします。

デフォルトは -fma=none です。

積和演算命令を生成するための最低限のアーキテクチャーの要件は、SPARC では -xarch=sparcfmaf、x86 では -xarch=avx2 です。積和演算 (FMA) 命令をサポートしていないプラットフォームでプログラムが実行されないようにするため、コンパイラは積和演算 (FMA) 命令を生成する場合、バイナリプログラムにマーク付けをします。最低限のアーキテクチャーが使用されていない場合、-fma=fused は無効になります。

積和演算 (FMA) 命令により、積と和の間で中間の丸め手順が排除されます。その結果、-fma=fused を指定してコンパイルしたプログラムは、精度は減少ではなく増加する傾向にありますが、異なる結果になることがあります。

-fnonstd

これは、x86 上では -ftrap=common に、また SPARC 上では -fns -ftrap=common に展開されるマクロです。

詳細は、-fns-ftrap=common、および『数値計算ガイド』を参照してください。

-fns[={no|yes}]

SPARC の場合は、このオプションを指定すると、プログラムの実行開始時に非標準の浮動小数点モードが有効になります。

x86 の場合は、このオプションによって SSE flush-to-zero モードのほか、使用可能な場合は denormals-are-zero モードが選択されます。このオプションは、x86 では非正規数の結果をゼロにフラッシュします。また利用可能な場合には、非正規数オペランドもゼロとして扱われます。このオプションは、SSE や SSE2 命令セットを利用しない従来の x86 浮動小数点演算には影響しません。

一部の SPARC プラットフォームでは、非標準の浮動小数点モードによって「段階的アンダーフロー」が無効になるため、非常に小さい結果が非正規の数値を生成せずに 0 にフラッシュされます。さらに、このモードでは、非正規のオペランドが報告なしにゼロに置き換えられます。

段階的アンダーフローや非正規の数値をハードウェアでサポートしていない SPARC プラットフォーム上でこのオプションを使用すると、一部のプログラムのパフォーマンスが大幅に向上する場合があります。

オプションの =yes=no の使用により、-fns を含むほかの何らかのマクロフラグ (-fast など) に続く -fns フラグを切り替えるための方法が提供されます。

-fns は、-fns=yes と同じです。-fns=yes は、非標準の浮動小数点を選択します。-fns=no は、標準の浮動小数点を選択します。

デフォルト:

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

-fns のみが指定されている場合は、-fns=yes であると見なされます。

警告:

非標準のモードが有効になっていると、浮動小数点演算によって、IEEE 754 規格の要件に準拠しない結果が生成される可能性があります。

SPARC システムでは、このオプションはメインプログラムのコンパイル時に使用される場合にのみ有効です。

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

-fopenmp

-xopenmp=parallel と同じです。

-fprecision=a

(x86) 浮動小数点の丸め精度のモードを設定します。a は、singledoubleextended のいずれかである必要があります。

-fprecision フラグは、浮動小数点制御ワード内の丸め精度のモードビットを設定します。これらのビットは、基本演算 (加算、減算、乗算、除算、平方根) の結果をどの精度に丸めるかを制御します。

次の表に、a の値の意味を示します。

single

IEEE 単精度値に丸めます。

double

IEEE 倍精度値に丸めます。

extended

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

asingle または double である場合、このフラグにより、丸め精度のモードはプログラムの実行開始時に、それぞれ single または double の精度に設定されます。pextended であるか、または -fprecision フラグが使用されていない場合、丸め精度のモードは extended の精度のままになります。

single 精度の丸めモードでは、結果が 24 ビットの有効桁に丸められます。double 精度の丸めモードでは、結果が 53 ビットの有効桁に丸められます。デフォルトの extended 精度の丸めモードでは、結果が 64 ビットの有効桁に丸められます。このモードは、レジスタにある結果をどの精度に丸めるかを制御するだけであり、レジスタの値には影響を与えません。レジスタにあるすべての結果は、拡張倍精度形式の全範囲を使って丸められます。メモリー内に格納される結果は、宛先の形式の範囲と精度の両方に丸められます。

float 型の公称精度は single です。long double 型の公称精度は extended です。

デフォルト:

-fprecision フラグが指定されていない場合、丸め精度のモードは、デフォルトで extended になります。

警告:

このオプションは、x86 システムでメインプログラムのコンパイル時に使用する場合にのみ有効で、64 ビットプラットフォーム (-m64) または SSE2 対応プロセッサ (-xarch=sse2) でコンパイルする場合は無視されます。SPARC プラットフォームでは -fprecision は無視されます。

-fround=a

起動時に IEEE 丸めモードを有効にします。

a は、nearest、tozero、negative、positive のいずれかである必要があります。

nearest

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

tozero

0 の方向に丸めます。

negative

負の無限の方向に丸めます。

positive

正の無限の方向に丸めます。

このオプションは、次に示す IEEE 754 丸めモードを設定します。

  • 定数式の評価時にコンパイラによって使用されます。

  • 実行時のプログラム初期化中に設定されます。

これらの意味は、実行時にモードを変更するために使用できる ieee_flags 関数の場合と同じです。

デフォルト:

-fround オプションが指定されていない場合、丸めモードはデフォルトで -fround=nearest になります。

警告:

あるルーチンを -fround=a でコンパイルする場合は、プログラムのすべてのルーチンを同じ -fround=a オプションでコンパイルしてください。そうしないと、予期しない結果になることがあります。このオプションは、メインプログラムをコンパイルするときにだけ有効です。

-xvector または -xlibmopt でのコンパイルには、デフォルトの丸めが必要です。-xvector または -xlibmopt のどちらか、あるいはその両方を使用してコンパイルされたライブラリにリンクするプログラムは、デフォルトの丸めが有効になっていることを確認する必要があります。

-fsimple[=n]

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

n が存在する場合、これは 0、1、または 2 である必要があります。

次の表に、-fsimple の値を示します。

0

前提事項の単純化を行えないようにします。IEEE 754 に厳密に準拠します。

1

若干の単純化を許可します。生成されるコードは、厳密には IEEE 754 に準拠していません。

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

-fsimple=1 では、オプティマイザは、次の点を前提にすることができます。

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

  • 潜在的な浮動小数点例外のほかに目に見える結果を生成しない計算は削除できます。

  • 無限大または非数をオペランドとして含む計算は、非数をその結果に伝播する必要はありません。たとえば、x*0 は 0 に置き換えることができます。

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

2

-fsimple=1 のすべての機能を含み、さらに -xvector=simd が有効である場合は、縮約を計算するための SIMD 命令の使用も有効にします。

また、積極的な浮動小数点の最適化も許可します。これにより、丸めの変化によって、多くのプログラムで異なる数値結果が生成される可能性があります。たとえば、オプティマイザが特定のループ内の x/y のすべての演算を x*z に置き換えることができるようにします。ここで、x/y はループ z=1y 内で少なくとも 1 回評価されることが保証されており、y と z の値はループの実行中に定数値を持つことがわかっています。

デフォルト:

-fsimple が指定されていない場合、コンパイラは -fsimple=0 を使用します。

-fsimple は指定されているが、n に値が指定されていない場合、コンパイラは -fsimple=1 を使用します。

警告:

このオプションによって、IEEE 754 に対する適合性が損なわれることがあります。

関連項目:

最適化が精度にどのように影響する場合があるかを詳細に説明するために Rajat Garg と Ilya Sharapov によって執筆された『Techniques for Optimizing Applications: High Performance Computing』。OTN Oracle Solaris Studio の Web サイト (oracle.com/technetwork/server-storage/solarisstudio/) のパフォーマンスおよび精度に関する記事も参照してください

-fstore

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

このオプションを指定すると、コンパイラは、浮動小数点の式または関数の値をレジスタ内に置いたままにするのではなく、その式または関数が変数に割り当てられたときか、またはその式がより短い浮動小数点型にキャストされたときに代入式の左辺の型に変換します。

このオプションを解除するには、オプション -nofstore を使用してください。

警告:

丸めや切り捨てのために、結果がレジスタの値から生成された値とは異なることがあります。

-ftrap=a[,a...]

This option the IEEE 745 trapping mode in effect at startup but does not install a SIGFPE handler. You can use ieee_handler(3M) or fex_set_handling(3M) to simultaneously enable traps and install a SIGFPE handler. If you specify more than one value, the list is processed sequentially from left to right.

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

[no%]division

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

[no%]inexact

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

[no%]invalid

無効な演算をトラップします。

[no%]overflow

オーバーフローをトラップします。

[no%]underflow

アンダーフローをトラップします。

%all

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

%none

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

common

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

[no%] 接頭辞は、%all または common の値の意味を変更する目的でのみ使用されるため、例に示すように、これらのいずれかの値とともに使用する必要があることに注意してください。[no%] 接頭辞は、単独で特定のトラップを明示的に無効にするものではありません。

デフォルト:

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

例: -ftrap=%all,no%inexact は、inexact を除くすべてのトラップを設定することを示します。

警告:

あるルーチンを -ftrap でコンパイルする場合は、プログラムのすべてのルーチンを同じ -ftrap オプションでコンパイルしてください。そうしないと、予期しない結果になることがあります。

-ftrap=inexact トラップでは、浮動小数点の値が正確に表現できないとトラップが発生するため、使用には注意してください。たとえば、次の文ではこの条件が発生する場合があります。

x = 1.0 / 3.0;
-G

実行可能ファイルの代わりに動的共有ライブラリを構築します。ld(1) のマニュアルページおよび『C++ ユーザーズガイド』を参照してください。コマンド行で指定されたソースファイルはすべて、デフォルトでは -xcode=pic13 でコンパイルされます。

テンプレートが含まれていて、-instances=extern オプションを使用してコンパイルされたファイルから共有ライブラリを構築すると、.o ファイルにより参照されているテンプレートインスタンスがすべてテンプレートキャッシュから自動的に含められます。

コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションと -G オプションを組み合わせて共有ライブラリを作成した場合は、生成された共有オブジェクトとのリンクでも、必ず同じオプションを指定してください。

-xcode の説明に記述されているように、共有オブジェクトを作成するときは、64 ビット SPARC アーキテクチャー用にコンパイルされるすべてのオブジェクトファイルもまた、明示的な -xcode 値を使用してコンパイルする必要があります。

-c が指定されていない場合は、次のオプションが ld に渡されます。-dy-G、および -R

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

-G オプションを使用すると、コンパイラはデフォルトの -l オプションを ld に渡しません。共有ライブラリが別の共有ライブラリに対する依存関係を持つようにするには、コマンド行で必要な -l または -library オプションを渡す必要があります。たとえば、共有ライブラリが libCrun に依存するようにするには、コマンド行で -lCrun または -library=Crun を渡す必要があります。

-g

-g[n] を参照してください。

-g[n]

コンパイラとリンカーの両方に、dbx(1) でのデバッグ、または analyzer(1) でのパフォーマンス分析のためのファイルまたはプログラムを準備するよう指示します。タスクには次のものが含まれます。

  • n に応じて、オブジェクトファイルと実行可能ファイルのシンボルテーブル内により詳細な情報を生成します。

  • デバッガがその一部の機能を実装するために呼び出すことのできる、いくつかの「ヘルパー関数」を生成します。

  • 最適化レベルが指定されていない場合は、関数のインライン生成を無効にします。つまり、最適化レベルも同時に指定されていない場合は、このオプションを使用すると +d オプションが指定されていることになります。-O または -xO レベルが指定された -g では、インライン化は無効になりません。

  • 特定のレベルの最適化を無効にする。

このオプションを -xO[level] (または、-O などの同等のオプション) とともに使用した場合は、インライン化および限られたデバッグ情報が得られます。詳細は、-xO のエントリを参照してください。

-gO を指定し、かつ最適化レベルが -xO3 以下である場合、コンパイラは、最大限のシンボリック情報をほぼ完全な最適化とともに提供します。末尾呼び出しの最適化は無効になります。

このオプションを使用し、かつ最適化レベルが -xO4 以上である場合、コンパイラは、最大限のシンボリック情報を完全な最適化とともに提供します。

このオプションを指定した場合は、-O または -xO も同時に指定されていないかぎり、+d オプションが自動的に指定されます。

パフォーマンスアナライザのすべての機能を使用するには、-g オプションでコンパイルします。一部のパフォーマンス分析機能には -g は必要ありませんが、注釈付きソース、一部の関数レベルの情報、およびコンパイラ解説メッセージを表示するには、-g でコンパイルする必要があります。詳細は、analyzer(1) のマニュアルページおよび『パフォーマンスアナライザ』のマニュアルを参照してください。

-g オプションで生成される解説メッセージは、プログラムのコンパイル時にコンパイラが実行した最適化と変換について説明します。ソースコードでインタリーブされたメッセージを表示するには、er_src(1) コマンドを使用します。

プログラムを個別の手順でコンパイルしてリンクする場合、—g オプションを一方の手順に含め、もう一方の手順から除外してもプログラムの正確さには影響しませんが、プログラムのデバッグ機能に影響します。-g (または -g0) でコンパイルされていないが、-g (または -g0) でリンクされたモジュールはすべて、デバッグのために適切に準備されません。関数 main を含むモジュールの -g オプション (または -g0 オプション) でのコンパイルは通常、デバッグのために必要であることに注意してください。

-g は、ほかのさまざまな、よりプリミティブなオプションに展開されるマクロとして実装されます。展開の詳細については、-xdebuginfo を参照してください。

値:

-g

標準のデバッグ情報を生成します。

-gnone

デバッグ情報は生成されません。これはデフォルト値です。

-g1

事後デバッグの際に重要と思われるファイル、行番号、および簡単なパラメータ情報を生成します。

-g2

-g と同じです。

-g3

追加のデバッグ情報 (現在はマクロの定義情報のみで構成されます) を生成します。この追加情報により、-g のみを使用したコンパイルと比較して、結果の .o および実行可能ファイルのデバッグ情報のサイズが増える可能性があります。

-g0

コンパイラに、デバッグのためのファイルまたはプログラムを準備するが、インライン化を無効にしないよう指示します。このオプションは、+d が無効になり、dbx がインライン化された関数にステップインできない点を除き、-g と同じです。

関連項目:

詳細は、-xs+d の説明、および ld(1) のマニュアルページを参照してください。

-H

標準エラー出力 (stderr) で、現在のコンパイルに含まれている各 #include ファイルのパス名を 1 行に 1 つずつ出力します。

-h[ ]lname

名前 lname を、生成された共有動的ライブラリに割り当てます。

これは ld に渡されるローダーオプションです。一般に、-h のあとの名前は、-o のあとの名前とまったくと同じにするべきです。-hlname の間のスペースはオプションです。

コンパイルの時ローダーは、作成対象の共有動的ライブラリに、指定の名前を割り当てます。この名前は、ライブラリのイントリンシック名として、ライブラリファイルに記録されます。-hlname オプションがない場合、組み込み名はライブラリファイル内に記録されません。

どの実行可能ファイルにも、必要な共有ライブラリファイルのリストがあります。実行時のリンカーは、ライブラリを実行可能ファイルにリンクするとき、ライブラリのイントリンシック名をこの共有ライブラリファイルのリストの中にコピーします。共有ライブラリに組み込み名がないと、リンカーは代わりにその共有ライブラリファイルのパス名を使用します。次のコマンド行は 1 つの例です。

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

相互の関連性:

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

-help

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xhelp=flags を使用してください。

-Ipathname

相対ファイル名 (スラッシュ以外の文字で始まるファイル名) を持つファイルを検索するためのディレクトリリストに、pathname (パス名) を追加します。

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

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

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

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

  4. usrinclude

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

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

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

  3. usrinclude

注: スペルが標準ヘッダーファイルの名前に一致している場合は、C++ のユーザーズガイドの標準ヘッダーの実装に関するセクションも参照してください。

相互の関連性:

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

-I- オプションを使用すると、デフォルトの検索規則をオーバーライドできます。

-library=no%Cstd が指定されている場合、コンパイラで提供される Cstd ヘッダーファイルは検索されません。

注: -ptipath が使用されていない場合、コンパイラは -Ipathname 内でテンプレートファイルを探します。-ptipath の代わりに -Ipathname を使用することをお勧めします。

警告:

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

-I-

インクルードファイルの検索規則を次のように変更します。

  • #include "foo.h" という形式のインクルードファイルの場合は、ディレクトリを次の順序で検索します。

    1. -I オプション (-I- の前とあとの両方) で指定されたディレクトリ。

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

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

  • #include <foo.h> 形式のインクルードファイルの場合、次の順序でディレクトリを検索します。

    1. -I- のあとにある -I オプションで指定されているディレクトリ。

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

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

警告:

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

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

-i

リンカー ld(1) に、LD_LIBRARY_PATH または LD_LIBRARY_PATH_64 の設定をすべて無視するよう指示します。

-include filename

このオプションを指定すると、コンパイラは filename を、主要なソースファイルの 1 行目に記述されているかのように #include プリプロセッサ指令として処理します。

コンパイラが filename を検索する最初のディレクトリは現在の作業ディレクトリであり、ファイルが明示的にインクルードされている場合のようにメインのソースファイルが存在するディレクトリになるわけではありません。コンパイラが現在の作業ディレクトリで filename を見つけられない場合は、通常のディレクトリパスが検索されます。複数の -include オプションを指定する場合は、コマンド行で表示された順にファイルがインクルードされます。

-inline

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xinline を使用してください。

-instances=a

テンプレートインスタンスの位置とリンケージを制御します。次の表に、a の値の意味を示します。

extern

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

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

explicit

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

global

必要なすべてのインスタンスを現在のオブジェクトファイルの comdat セクション内に配置し、それらに対してグローバルリンケージを行います。

semiexplicit

明示的にインスタンス化されたインスタンスおよび明示的なインスタンスが必要とするすべてのインスタンスを現在のオブジェクトファイルの comdat セクション内に配置し、それらに対してグローバルリンケージを行います。

static

-instances=static は非推奨です。現在では -instances=global によって static のすべての利点が得られ、欠点はなくなっているため、-instances=static を使用する理由はなくなりました。このオプションは、このバージョンのコンパイラには存在しない、旧リリースのコンパイラにあった問題を克服するために用意されていました。必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して静的リンケージを行います。

デフォルト:

instances が指定されていない場合は、-instances=global であると見なされます。

警告:

staticsemiexplicit の値では、無効な結果が生成されることがあります。詳細は、『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 を使用してください。

(x86) x86 アーキテクチャー上の -Kpic と同じです。

-Kpic

(SPARC) (廃止) 代わりに -xcode=pic13 を使用してください。

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

-keeptmp

コンパイル中に作成された一時ファイルを保持します。このオプションは、-verbose=diags とともに、デバッグに役立ちます。

-Lpath

ライブラリ検索パスに path を追加します。

このオプションは ld に渡されます。リンカーは、コンパイラで提供されるディレクトリを検索する前に、path で指定されたディレクトリを検索します。

相互の関連性:

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

警告:

/usr/includelib/usr/lib、またはコンパイラのインストール領域を検索ディレクトリとして指定しないでください。

-llib

リンカーの検索ライブラリのリストにライブラリ liblib.a または liblib.so を追加します。

このオプションは ld に渡されます。通常のライブラリには、liblib.aliblib.so などの名前が付いており、この lib.a または .so の部分が必要です。このオプションでは、lib の部分を指定できます。1 つのコマンド行に必要な数だけのライブラリを配置します。これらのライブラリは、-Lpath で指定された順序で検索されます。

このオプションはオブジェクトファイル名のあとに使用してください。

相互の関連性:

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

警告:

マルチスレッドアプリケーションを構築するか、またはマルチスレッド化されたライブラリにアプリケーションをリンクする場合は、そのアプリケーションを直接 -lthread でリンクするのではなく、プログラムを -mt オプションでコンパイルおよびリンクする必要があります (-mt を参照)。

-libmieee

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xlibmieee を使用してください。

-libmil

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xlibmil を使用してください。

-library=lib[,lib...]

指定された CC で提供されるライブラリをコンパイルとリンクに組み込みます。

CC で提供されるライブラリを指定するために -library オプションが使用されている場合は、適切な -I パスがコンパイル中に設定され、適切な -L、-Y、-P-R の各パスと -l オプションがリンク中に設定されます。

値:

サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

次の表に、lib の値の意味を示します。

[no%]f77

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

[no%]f90

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

[no%]f95

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

[no%]interval

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

[no%]iostream

古い iostream ライブラリ libiostream を使用します。

[no%]Cstd

C++ 標準ライブラリ libCstd を使用し、コンパイラで提供される C++ 標準ライブラリヘッダーファイルをインクルードします。

[no%]stlport4

デフォルトの libCstd の代わりに、標準ライブラリの STLport 実装を使用します。-library=stlport4 でコンパイルされたコードは、デフォルトの -library=Cstd またはオプションの -library=stdcxx4 でコンパイルされたコードと同じプログラムでは使用できません。

[no%]stlport4_dbg

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

[no%]stdcxx4

デフォルトの libCstd の代わりに、Oracle Solaris の一部としてインストールされた Apache stdcxx バージョン 4 ライブラリを使用します。このオプションにより、-mt オプションも暗黙的に設定されます。stdcxx ライブラリには、マルチスレッドモードが必要です。このオプションは、コンパイルのたびに、およびアプリケーション全体のリンクコマンドで一貫して使用する必要があります。-library=stdcxx4 を使用してコンパイルされたコードは、デフォルトの -library=Cstd または省略可能な -library=stlport4 を使用してコンパイルされたコードと同じプログラムでは使用できません。

[no%]Crun

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

[no%]gc

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

[no%]sunperf

Sun Performance Library を使用します。

%none

libCrun を除き、C++ ライブラリを使用しません。

-library=libC は許可されないことに注意してください。

デフォルト:

libCstd ライブラリは、-library=%none-library=no%Cstd-library=stdcxx4、または -library=stlport4 を使用して明確に除外されないかぎり常に含まれます。

また、libm および libc ライブラリは、-library=%none を指定した場合でも常に含まれます。libCrun は常に含まれます。

例:

どの C++ ライブラリ (libCrun を除く) も使用せずにリンクするには、次のコマンドを使用します。

example% CC -library=%none

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

相互の関連性:

-xnolib が指定されている場合、-library は無視されます。

-library でライブラリが指定されている場合は、適切な -I パスがコンパイル中に設定されます。適切な -L、-Y、-P、-R の各パスと -l オプションがリンク中に設定されます。

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

同じコマンド行では -library=stlport4-library=stdcxx4-library=Cstd のうちのいずれか 1 つを指定できます。

-library=sunperf-xlic_lib=sunperf を同じコマンド行で使用することはできません。

区間演算ライブラリを使用する場合は、libCstd または libiostream のいずれかのライブラリを含める必要があります。

指定したライブラリは、システムサポートライブラリよりも前にリンクされます。

警告:

いわゆる「従来の」iostream は、1998 C++ 標準で置き換えられた iostream の 1986 オリジナルバージョンです。これは、-library=iostream オプションを使用して選択されます。「従来の」iostream のどの 2 つの実装も同じではないため、廃止されている場合を除き、それを使用するコードには移植性がありません。このライブラリは将来の Oracle Solaris Studio リリースで中止される予定であることに注意してください。

STLport または Oracle Solaris Studio C++ ライブラリのどの構成マクロも再定義または変更しないでください。これらのライブラリは、C++ コンパイラと連携するような方法で構成および構築されています。構成マクロを変更すると、プログラムがコンパイルまたはリンクされなかったり、正しく動作しなくなったりします。

コンパイルとリンクを別の手順で行う場合は、コンパイルコマンドで指定される一連の -library オプションをリンクコマンドでも指定する必要があります。

これらのライブラリは安定したものではなく、リリースによって変わることがあります。

関連項目:

-I-l-R-staticlib-xia-xlang-xnolib、『C++ Interval Arithmetic Programming Reference』、『C++ Standard Reference Library

-m32|-m64

コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。

32 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m32 を使用します。64 ビット実行可能ファイルおよび共有ライブラリを作成するには、-m64 を使用します。

ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は、64 ビット対応ではないすべての Oracle Solaris プラットフォームおよび Linux プラットフォームでのデフォルトです。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は 64 ビット対応の Linux プラットフォームのデフォルトです。-m64 は LP64 モデル対応のプラットフォームでのみ使用できます。

-m32 でコンパイルされたオブジェクトファイルまたはライブラリは、-m64 でコンパイルされたオブジェクトファイルまたはライブラリとリンクできません。

大量の静的データを持つアプリケーションを -m64 を使用してコンパイルするときは、-xmodel=medium も必要になることがあります。一部の Linux プラットフォームは、ミディアムモデルをサポートしていません。

-m32|-m64 を指定してコンパイルしたモジュールは、-m32|-m64 を指定してリンクする必要があります。コンパイル時とリンク時の両方で指定する必要のあるコンパイラオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

旧バージョンのコンパイラでは、-xarch で命令セットを選択することで、メモリーモデルの ILP32 または LP64 が暗黙に指定されていました。Sun Studio 12 以降のコンパイラでは、このようなことはありません。ほとんどのプラットフォームでは、64 ビットオブジェクトを作成するのに、コマンド行に -m64 を追加するだけです。

Oracle Solaris では、-m32 がデフォルトです。64 ビットプログラムをサポートしている Linux システムでは、-m64 -xarch=sse2 がデフォルト値です。

-xarch も参照してください。

-mc

オブジェクトファイルの.commentセクションから、重複する文字列を削除します。-mc オプションを使用すると、mcs -c コマンドが呼び出されます。(mcs(1) のマニュアルページを参照)。

-misalign

(SPARC) (廃止) このオプションは使用すべきではありません。代わりに -xmemalign=2i オプションを使ってください。

-mr[,string]

オブジェクトファイルの .comment セクションからすべての文字列を削除し、string が指定されている場合は、そのセクション内に string を配置します。文字列に空白が含まれている場合は、文字列を引用符で囲む必要があります。このオプションを使用すると、mcs -d [- string] コマンドが呼び出されます。

相互の関連性:

このオプションは、-S が指定されている場合は無効です。

-mt[={yes|no}]

このオプションを使用して、Oracle Solaris スレッドまたは POSIX スレッド API を使用しているマルチスレッド化コードをコンパイルおよびリンクします。-mt=yes オプションにより、ライブラリが適切な順序でリンクされることが保証されます。

このオプションは -D_REENTRANT をプリプロセッサに渡します。

Oracle Solaris スレッドを使用するには、thread.h ヘッダーファイルをインクルードし、-mt=yes オプション付きでコンパイルします。Oracle Solaris プラットフォームで POSIX スレッドを使用するには、pthread.h ヘッダーファイルをインクルードし、-mt=yes オプション付きでコンパイルします。

Linux プラットフォーム上では、POSIX スレッドの API のみが使用できます (Linux プラットフォームには libthread はありません)。したがって、Linux プラットフォームで -mt=yes を使用すると、—lthread の代わりに —lpthread が追加されます。Linux プラットフォームで POSIX スレッドを使用するには、—mt を使用してコンパイルします。

-G を使用してコンパイルする場合は、-mt=yes を指定しても、-lthread-lpthread のどちらも自動的には含められません。共有ライブラリを構築する場合は、これらのライブラリを明示的にリストする必要があります。

(OpenMP 共有メモリー並列化 API を使用するための) —xopenmp オプションには、-mt=yes が自動的に含まれます。

-mt=yes を指定してコンパイルを実行し、リンクを個別の手順でリンクする場合は、コンパイル手順と同様にリンク手順でも -mt=yes オプションを使用する必要があります。-mt=yes を使用して 1 つの変換ユニットをコンパイルおよびリンクする場合は、-mt=yes を指定してプログラムのすべてのユニットをコンパイルおよびリンクする必要があります。

-mt=yes は、コンパイラのデフォルトの動作です。この動作が望ましくない場合は、オプション -mt=no を使用してください。

オプション -mt は、-mt=yes と同じです。

関連項目: -xnolib

-native

-xtarget=native を使用します。

-noex

-features=no%except を使用します。

-nofstore

x86 コマンド行の -fstore を取り消します。

式に、-fstore によって呼び出された宛先の変数の精度を強制的に持たせることを取り消します。

-nofstore は、-fast によって呼び出されます。-fstore が通常のデフォルトです。

-nolib

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xnolib を使用してください。

-nolibmil

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xnolibmil を使用してください。

-noqueue

(廃止) このオプションは暗黙的に何も実行しません。

-norunpath

共有ライブラリのパスを実行可能ファイルに組み込みません。

実行可能ファイルが共有ライブラリを使用する場合、コンパイラは通常、実行時のリンカーに対して共有ライブラリの場所を伝えるために構築を行なったパス名を知らせます。それを行うために、コンパイラは ld-R オプションを渡します。このパスはコンパイラのインストール先によって決まります。

このオプションは、プログラムで使用される共有ライブラリに異なるパスを持つ可能性がある顧客に出荷される実行可能ファイルを構築する場合に推奨されます。

相互の関連性:

コンパイラがインストールされている領域 (デフォルトの場所は <installpath>/lib) でいずれかの共有ライブラリを使用し、かつ -norunpath も使用する場合は、リンク時に -R オプションを使用するか、または実行時に環境変数 LD_LIBRARY_PATH を設定して共有ライブラリの場所を指定するようにしてください。これにより、実行時リンカーが共有ライブラリを検索できるようになります。

-O

-O マクロは、-xO3 に展開されます。このオプションでコンパイルすると、実行時のパフォーマンスが向上します。ただし、すべての変数が自動的に volatile と見なされることに依存するプログラムの場合、最適化レベル -xO3 は適していない可能性があります。この前提を持つ典型的なプログラムは、独自の同期処理プリミティブを実装するデバイスドライバや古いマルチスレッドアプリケーションです。回避方法は -O の代わりに -xO2 を指定してコンパイルすることです。

-O[level]

-xOlevel を使用します。

-o filename

デフォルトの a.out ではなく、出力ファイル filename を指定します。cc はソースファイルを上書きしないため、filenameソースファイルと同じにできません。

filename は適切な接尾辞を持つ必要があります。-c とともに使用されると、filename はターゲットの .o オブジェクトファイルを指定します。-G とともに使用されると、ターゲットの .so ライブラリファイルを指定します。このオプションとその引数は ld に渡されます。

+p

非標準プリプロセッサの表明を無視します。

デフォルト:

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

相互の関連性:

+p が使用されている場合、sununixsparc、および i386 マクロは定義されません。

-P

ソースの前処理のみ実行し、コンパイルは行いません。(.i 接尾辞の付いたファイルを出力します)。

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

-p

(廃止) -xpg を参照してください。

-pentium

(x86) -xtarget=pentium を使用します。

-pg

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xpg を使用してください。

-PIC

(SPARC) -xcode=pic32 と同じです。

(x86) -KPIC と同じです。

-pic

(SPARC) -xcode=pic13 と同じです。

(x86) -Kpic と同じです。

-preserve_argvalues[=simple|none]

(x86) レジスタベースの関数の引数のコピーをスタックに保存します。

コマンド行に none を指定した場合、または -preserve_argvalues オプションを指定しない場合、コンパイラは通常どおりに動作します。

simple を指定した場合、最大で 6 つの整数引数が保存されます。

仮引数に割り当てられている関数の有効期間中、値は更新されません。

-pta

-template=wholeclass を使用します。

-ptipath

テンプレートソース用の検索ディレクトリを追加指定します。

このオプションは、-Ipathname によって設定される通常の検索パスの代わりになります。-ptipath フラグが使用されている場合、コンパイラはこのパス上のテンプレート定義ファイルを探し、-Ipathname フラグを無視します。

-ptipath の代わりに -Ipathname フラグを使用すると、混乱が軽減されます。

相互の関連性:

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

-pto

-instances=static を使用します。

-ptv

-verbose=template を使用します。

-Qoption phase option[,option...]

option をコンパイルの phase に渡します。

複数のオプションを渡すには、コンマで区切って指定します。-Qoption でコンポーネントに渡されるオプションは、順序が変更されることがあります。ドライバが認識するオプションは、正しい順序に保持されます。ドライバがすでに認識しているオプションに、-Qoption は使わないでください。たとえば、C++ コンパイラは、リンカー (ld) に対する -z オプションを認識します。次のようなコマンドを発行すると

CC -G -zallextract mylib.a -zdefaultextract ... // correct

-z オプションはリンカーに渡されます。ただし、次のようなコマンドを指定すると

CC -G -Qoption ld -zallextract mylib.a \
     -Qoption ld -zdefaultextract ... // error

-z オプションは並べ替えられる場合があるため、正しくない結果が生成されます。

次の表に、phase に指定可能な値を示します。

SPARC             x86

ccfe              ccfe
iropt             iropt
cg                ube
CClink            CClink
ld                ld

例:

次のコマンドで CC ドライバが ld を呼び出すと、-Qoptionld-i オプションを渡します。

example% CC -Qoption ld -i test.cc

警告:

意図しない結果にならないように注意してください。例:

-Qoption ccfe -features=bool,iddollar

は次のように解釈されます。

-Qoption ccfe -features=bool -Qoption ccfe iddollar

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

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

これらの機能は -Qoption を必要とせず、例としてのみ使用されていることに注意してください。

-qoption phase option

-Qoption を使用します。

-qp

-p と同じです。

-Qproduce sourcetype

CC ドライバがタイプ sourcetype のソースコードを生成するようにします。ソースコードのタイプを次の表に示します。

.i

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

.o

コードジェネレータからのオブジェクトファイル

.s

コードジェネレータからのアセンブラソース

-qproduce sourcetype

-Qproduce を使用します。

-Rpath[:path...]

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

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

デフォルト:

-R オプションが存在しない場合は、デフォルトのライブラリ検索パスが出力オブジェクト内に記録され、実行時リンカーに渡されます。デフォルトのライブラリ検索順序は、-dryrun オプションを使用し、ld 呼び出しの -Y オプションを検査することによって確認できます。

相互の関連性:

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

LD_RUN_PATH 環境変数と -R オプションの両方が指定されている場合は、-R のパスがスキャンされ、LD_RUN_PATH のパスは無視されます。

関連項目: -norunpath

-S

コンパイルしてアセンブリコードだけを生成します。このオプションを指定すると、CC ドライバはプログラムをコンパイルしてアセンブリソースファイルを出力しますが、プログラムのアセンブルは行いません。このアセンブリソースファイル名には、.s という接尾辞が付きます。

-s

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

-staticlib=l[,l...]

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

値:

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

[no%]library

library を静的にリンクします。library に有効な値は、-library に有効なすべての値 (%all%none を除く)、-xlang に有効なすべての値、および interval (-xia と組み合わせて使用される) です。リンク library を無効にするには、接頭辞 no% を使用します。

%all

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

%none

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

デフォルト:

-staticlib が指定されていない場合は、-staticlib=%none であると見なされます。

相互の関連性:

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

-staticlib オプションは、デフォルトで暗黙的に選択された C++ ライブラリに加えて、-xia-xlang、および -library オプションで明示的に選択された C++ ライブラリに対してのみ機能します。デフォルトでは、CstdCrun が選択されます。

例:

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

(正) example% CC -staticlib=Crun test.cc

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

(誤) example% CC -staticlib=gc test.cc

(正) example% CC -library=gc -staticlib=gc test.cc

警告:

ライブラリに使用できる一連の値は安定したものではなく、リリースごとに変更される可能性があります。

Oracle Solaris プラットフォーム上では、システムライブラリは静的ライブラリとして使用できません。

オプション -staticlib=Crun および -staticlib=Cstd は、64 ビットの Oracle Solaris x86 プラットフォーム上では機能しません。静的にリンクする特別な必要性がないかぎり、サポートライブラリは動的にリンクするようにしてください。場合によっては、静的リンクのためにプログラムが正しく動作しなくなることがあります。

-std=v

v は必須であり、次のいずれかです。

c++03 (オー 3 ではなく、ゼロ 3)

C++ 03 ダイアレクトおよび g++ バイナリ互換性を選択します。これは -compat=g オプションと同等です。

c++11

C++ 11 ダイアレクトおよび g++ バイナリ互換性を選択します。

c++0x (オー x ではなく、ゼロ x)

c++11 と同等です。

sun03

-compat=5 と同等です。

-std オプションが複数指定されている場合は、最後の (右端にある) オプションのみが有効になります。

相互の関連性:

-compat オプションと -std オプションを同じコマンド行で指定することはできません。

-std が指定されている場合は、CstdCruniostreamstlport4stdcxx4 のいずれの -library サブオプションも使用できません。

discover(1) は、-std=c++11 でコンパイルするときの限られた機能モード (オプション -l) でのみ使用できます。

注:

C++11 ダイアレクトは、-compat=5 のバイナリ互換性では使用できません。

-sync_stdio=[yes|no]

このオプションは、C++ iostream と C stdio の間の同期のために実行時のパフォーマンスが縮退しているときに使用します。同期が必要なのは、同じプログラム内で iostream を使って cout に書き込み、stdio を使って stdout に書き込みを行う場合だけです。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 を指定します。コンパイラは -temp によって設定された値を、TMPDIR の値より優先します。

関連項目: -keeptmp

-template=a[,a...]

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

a は、次の値のいずれかである必要があります。サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

[no%]extdef

別のソースファイル内のテンプレート定義を検索します。

[no%]geninlinefuncs

以前には生成されなかった明示的にインスタンス化されたクラステンプレートのインラインメンバー関数をインスタンス化します。

[no%]wholeclass

使用されている関数だけでなく、テンプレートクラス全体をインスタンス化します。クラスの少なくとも 1 つのメンバーを参照する必要があります。そうしないと、コンパイラは、クラスのどのメンバーもインスタンス化しません。

-template=no%extdef が指定されている場合、コンパイラは、マクロ _TEMPLATE_NO_EXTDEF を事前に定義します。

デフォルト:

-template=no%wholeclass,no%extdef,no%geninlinefuncs

-time

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xtime を使用してください。

-traceback[={%none|common|signals_list}]

実行時に重大エラーが発生した場合にスタックトレースを発行します。

-traceback オプションを指定すると、プログラムによって特定のシグナルが生成された場合に、実行可能ファイルで標準エラー出力へのスタックトレースが発行されて、コアダンプが実行され、終了します。複数のスレッドが 1 つのシグナルを生成すると、スタックトレースは最初のスレッドに対してのみ生成されます。

追跡表示を使用するには、リンク時に -traceback オプションをコンパイラコマンド行に追加します。このオプションはコンパイル時にも使用できますが、実行可能バイナリが生成されない場合無視されます。-traceback -G とともに使用して共有ライブラリを作成すると、エラーが発生します。

%none
none

トレースバックを無効にします。

common

一連の共通シグナル sigillsigfpesigbussigsegv、および sigabrt のいずれかが生成された場合に、スタックトレースを発行することを指定します。

signals_list

スタックトレースを生成するべきシグナルの名前のコンマ区切りのリスト (小文字) を指定します。sigquitsigillsigtrapsigabrtsigemtsigfpesigbussigsegvsigsyssigxcpusigxfsz のシグナル (コアファイルが生成されるシグナル) をキャッチできます。

これらのシグナルの前に no% を付けると、シグナルのキャッチは無効になります。

たとえば、-traceback=sigsegv,sigfpe と指定すると、sigsegv または sigfpe が生成された場合にスタックトレースとコアダンプが生成されます。

このオプションを指定しない場合、デフォルトは -traceback=%none になります。

= 記号なしで、-traceback だけを指定すると、-traceback=common の意味になります。

注: コアダンプが不要な場合は、次を使用して coredumpsize 制限を 0 に設定できます。

% limit coredumpsize 0

-traceback オプションは、実行時のパフォーマンスに影響しません。

-Uname

プリプロセッサシンボル name の初期定義を削除します。このオプションは、同じコマンド行で -D によって作成されたマクロシンボル name の初期定義をすべて削除します。コマンド行ドライバによって、そこに暗黙的に配置されたものも含みます。

このオプションは、ほかの事前定義されたマクロや、ソースファイル内のマクロ定義には影響を与えません。

コマンド行ドライバによってコマンド行に配置された -D オプションを表示するには、コマンド行に -dryrun オプションを追加します。

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

例:

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

example% CC -U__sun test.cc

相互の関連性:

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

-U オプションはすべて、存在しているすべての -D オプションのあとに処理されます。

-unroll=n

このオプションは非推奨であり、将来のリリースで削除される予定です。代わりに -xunroll=n を使用してください。

-V

-verbose=version と同じです。

-v

-verbose=diags と同じです。

-verbose=a[,a...]

コンパイラの冗長性を制御します。

a は、次の値のいずれかである必要があります。サブオプションに適用された接頭辞 no% は、%all とともに使用されると、そのサブオプションを無効にします。

[no%]template

テンプレートのインスタンス化の冗長モード (検証モードと呼ばれる場合もあります) を有効にします。冗長モードでは、コンパイル中に発生するインスタンス化の各フェーズが表示されます。

[no%]diags

コンパイルパスごとにコマンド行を出力します。

[no%]version

CC ドライバに、起動するプログラムの名前とバージョン番号を出力するよう指示します。

%all

上記のすべてを呼び出します。

%none

上記のどれも呼び出しません。

デフォルト:

-verbose が指定されていない場合、コンパイラは -verbose=%none であると見なします。

相互の関連性:

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

-Wc,arg

コンポーネント c に引数 arg を渡します。各引数は前の引数からコンマでのみ区切る必要があります。(コンマを引数の一部にするには、バックスラッシュ (\) 文字を直前に付けてエスケープします。バックスラッシュは生成される引数から削除されます。)すべての -W arg は、通常のコマンド行引数のあとに渡されます。

c には次のいずれかを指定できます。

a

アセンブラ : (fbe)、(gas)

c

C++ コードジェネレータ: (cg)(SPARC)

d

CC ドライバ

l

リンクエディタ (ld)

m

mcs

O

(大文字「O」) 内部手続きオプティマイザ

o

ポストオプティマイザ

p

プリプロセッサ (cpp)

0

(数字の 0) コンパイラ (ccfe)

2

オプティマイザ: (iropt)

注: -Wd を使用して、このマニュアルページに示されている CC オプションを C++ コンパイラに渡すことはできません。

-Wa,-o,objfile は、-oobjfile をその順序でアセンブラに渡します。また、-Wl,-I,name を指定すると、リンクフェーズで動的リンカー /usr/lib/ld.so.1 のデフォルト名がオーバーライドされます。

引数がツールに渡される順序は、ほかに指定されるコマンド行オプションとの関係で、変更される可能性があります。

+w

意図しない結果が生じる可能性のあるコードを特定します。

(+w オプションは、関数が大きすぎてインライン化できない場合や、宣言されたプログラム要素が未使用の場合に警告を生成しなくなりました。これらの警告は、ソース中の実際の問題を特定するものではないため、開発環境によっては不適切です。そのような環境では、+w でこれらの警告を生成しないようにすることで、+w をより効果的に使用することができます。これらの警告は、引き続き +w2 オプションで使用できます)。

次のような疑わしい構造に関する追加の警告を生成します。

  • 移植性がない

  • 間違っていると考えられる

  • 効率が悪い

デフォルト:

+w オプションを指定しない場合、コンパイラは必ず問題となる構造についてのみ警告を出力します。

相互の関連性:

一部の C++ 標準ヘッダーでは、+w でコンパイルされると警告が生成されます。

+w2

+w と同じ警告に加えて、おそらく害はないが、プログラムの最大の移植性を低下させる可能性のある技術的な違反に関する警告を発行します。

+w2 オプションは、システムのヘッダーファイル中で実装に依存する構造が使用されている場合をレポートしなくなりました。システムヘッダーファイルが実装であるため、これらの警告は不適切でした。+w2 からこれらの警告を削除すると、このオプションをより効果的に使用できるようになります。

警告:

一部の Oracle Solaris ソフトウェアや C++ 標準ヘッダーファイルでは、+w2 でコンパイルされると警告が生成されます。

-w

警告メッセージを抑止します。

このオプションは、コンパイラが警告を出力しない原因となります。一部の警告 (特に、重大な旧式の構文に関する警告) は抑制できません。

-Xlinker arg

リンカー ld(1) に arg を渡します。-z arg と同等です。

-Xm

-features=iddollar を使用します。

-xaddr32[={yes|no}]

(x86/x64) -xaddr32=yes コンパイルフラグは、生成される実行可能ファイルまたは共有オブジェクトを 32 ビットアドレス空間に制限します。

この方法でコンパイルする実行可能ファイルは、32 ビットアドレス空間に制限されるプロセスを作成する結果になります。

-xaddr32=no を指定する場合は、通常の 64 ビットバイナリが作成されます。

-xaddr32 オプションを指定しないと、-xaddr32=no が想定されます。

-xaddr32 だけを指定すると、-xaddr32=yes が想定されます。

このオプションは、-m64 コンパイルのみ、および SF1_SUNW_ADDR32 ソフトウェア機能をサポートしている Oracle Solaris プラットフォームのみに適用できます。

Linux カーネルはアドレス空間制限をサポートしないため、このオプションは Linux では使用できません。-xaddr32 オプションは Linux では無視されます。

単一のオブジェクトファイルが -xaddr32=yes を指定してコンパイルされた場合は、出力ファイル全体が -xaddr32=yes を指定してコンパイルされたものと、リンク時に想定されます。

32 ビットアドレス空間に制限される共有オブジェクトは、制限された 32 ビットモードのアドレス空間内で実行されるプロセスから読み込む必要があります。

詳細は、『リンカーとライブラリ』で説明されている SF1_SUNW_ADDR32 ソフトウェア機能の定義を参照してください。

-xalias_level[= n]

コンパイラで型に基づく別名の解析を実行できるようにします。

デフォルト:

n は、anysimple、または compatible である必要があります。

-xalias_level

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

-xalias_level=any

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

-xalias_level=simple

コンパイラは、基本型に別名が付いていないことを前提にします。特に、次のいずれかの基本型である動的な型を持つストレージオブジェクト

  • charsigned char、および unsigned char

  • wchar_t

  • short intunsigned short int

  • intunsigned int

  • long intunsigned long int

  • long long intunsigned long long int

  • floatdoublelong double

  • 列挙型

  • データポインタ型

  • 関数ポインタ型

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

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

は、次の型の左辺値を使用してのみアクセスされます。

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

  • オブジェクトの動的な型の constant または volatile で修飾したバージョン

  • オブジェクトの動的な型に対応する、符号ありまたは符号なしの型

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

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

  • char 型または unsigned char 型

-xalias_level=compatible

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

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

  • オブジェクトの動的な型の constant または volatile で修飾したバージョン

  • オブジェクトの動的な型に対応する、符号ありまたは符号なしの型

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

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

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

  • char 型または unsigned char 型

コンパイラは、すべての参照の型が、対応するストレージオブジェクトの動的な型と配置の互換性があることを前提にします。2 つの型は、次の条件の場合に配置互換になります。

  • 2 つの型が同じ型の場合、これらは配置の互換性のある型です。

  • 2 つの型が constant と volatile のどちらで修飾されたかという点だけが異なる場合、これらは配置の互換性のある型です。

  • 符号付き整数型のそれぞれについて、対応する (ただし、異なる) 符号なし整数型が存在します。これらの対応する型には配置の互換性があります。

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

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

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

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

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

  • reinterpret_cast を使用して適切に変換された POD 構造体オブジェクトへのポインタは、その最初のメンバーか、またはそのメンバーがビットフィールドである場合はそのビットフィールドが存在するユニットを指します。

相互の関連性:

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

-xanalyze={code|%none}

(廃止) このオプションは、将来のリリースで削除される予定です。代わりに -xprevise を使用してください。

コードアナライザを使用して表示できるソースコードの静的分析を生成する場合は、このオプションを指定してコンパイルします。

-xanalyze=code を指定してコンパイルし、別の手順でリンクするときは、リンク手順でも -xanalyze=code を含めてください。

デフォルトは -xanalyze=%none です。

Linux では、-xanalyze=code-xannotate とともに指定する必要があります。

詳細は、Oracle Solaris Studio コードアナライザのドキュメントを参照してください。

-xannotate[={yes|no}]

最適化および監視ツール binopt(1)code-analyzer(1)discover(1)collect(1)、および uncover(1) で使用可能なバイナリを作成するよう、コンパイラに指示します。

Oracle Solaris でのデフォルトは -xannotate=yes です。Linux でのデフォルトは -xannotate=no です。値なしで -xannotate を指定することは、-xannotate=yes と同等です。

最適化および監視ツールを最適に使用するためには、コンパイル時とリンク時の両方で -xannotate=yes が有効である必要があります。

最適化および監視ツールを使用しないときは、-xannotate=no を指定してコンパイルおよびリンクすると、バイナリとライブラリが若干小さくなります。

-xar

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

テンプレートを使用する C++ のアーカイブを構築するときは、ほとんどの場合、テンプレートリポジトリ内でインスタンス化されたテンプレート関数をそのアーカイブに含めることが必要です。テンプレートリポジトリは、少なくとも 1 つのオブジェクトファイルが -instances=extern オプションでコンパイルされた場合にのみ使用されます。-xar とともに使用すると、これらのテンプレートが、必要に応じてアーカイブに自動的に追加されます。

ただし、コンパイラのデフォルトではテンプレートキャッシュが使用されないため、多くの場合、-xar オプションは必要ありません。一部のコードが -instances でコンパイルされていないかぎり、標準のシステムである ar(1) コマンドを使用して C++ コードの .a アーカイブファイルを作成できます。その場合は、代わりに -xar コンパイラオプションを使用します。

値:

ar -c-r を呼び出してアーカイブを最初から作成するには、-xar を指定します。

例:

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

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

警告:

コマンド行でテンプレートリポジトリから .o ファイルを追加しないでください。

アーカイブを構築するときは、ar コマンドを使用しないでください。CC -xar を使用して、テンプレートのインスタンス化がアーカイブに自動的に含まれるようにしてください。

関連項目: ar (1)

-xarch=isa

ターゲットのアーキテクチャー命令セット (ISA) を指定します。

このオプションは、指定の命令セットだけを許すことによって、コンパイラが指定の命令セットアーキテクチャーの命令に対応するコードしか生成できないようにします。このオプションは、ターゲット固有の命令の使用は保証しません。ただし、このオプションを使用するとバイナリプログラムの移植性に影響を与える可能性があります。このエントリの最後の「注意事項」および「警告」のセクションを参照してください。

注: コンパイラおよびリンカーは、特定の命令セットアーキテクチャー (ISA) を必要とする .o ファイルおよび実行可能ファイルをマークし、実行しているシステムで特定の ISA がサポートされない場合に、実行可能ファイルが実行時にロードされないようにします。

注: 意図するメモリーモデルとして LP64 (64 ビット) または ILP32 (32 ビット) を指定するには、それぞれ -m64 または -m32 オプションを使用してください。次に示すように以前のリリースとの互換性を保つ場合を除いて、-xarch オプションでメモリーモデルを指定できなくなりました。

アーキテクチャー固有の命令を使用する _asm 文またはインラインテンプレート (.il ファイル) を使用したコードには、コンパイルエラーを回避するために、適切な -xarch 値でのコンパイルが必要になることがあります。

別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。

値 (すべてのプラットフォーム):

generic

このオプションでは、ほとんどのプロセッサに共通の命令セットが使用されます。これはデフォルトであり、-xarch=sse2 と同等です。

generic64

ほとんどの 64 ビットプラットフォームで良好なパフォーマンスになるようにコンパイルします。(Oracle Solaris のみ)

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

native

このシステムで良好なパフォーマンスを得られるようにコンパイルします。

現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。

native64

このシステムで良好なパフォーマンスを得られるようにコンパイルします (Oracle Solaris のみ)。

このオプションは、-m64 -xarch=native に相当し、以前のリリースとの互換性のために用意されています。

SPARC プラットフォーム上の値:

sparc

SPARC-V9 ISA 用のコンパイルを行います。

V9 ISA 用のコンパイルですが、Visual Instruction Set (VIS) や、その他の実装固有の ISA 拡張機能は含まれません。このオプションを使用して、コンパイラは、V9 ISA で良好なパフォーマンスが得られるようにコードを生成できます。

sparc4

SPARC4 バージョンの SPARC-V9 ISA 用にコンパイルします。

SPARC-V9 命令セット、VIS 1.0 を含む UltraSPARC 拡張機能、VIS2.0、浮動小数点積和演算命令、VIS 3.0、および SPARC4 命令を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。

sparc4b

SPARC4B バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットからの命令に加えて、VIS 1.0 を含む UltraSPARC 拡張機能、VIS 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令、および SPARC T4 拡張機能からの PAUSE および CBCOND 命令を使用できるようにします。

sparc4c

SPARC4C バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットからの命令に加えて、VIS 1.0 を含む UltraSPARC 拡張機能、VIS 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、VIS 3.0 の VIS3B サブセットと呼ばれる SPARC T3 拡張機能のサブセットからの命令、および SPARC T4 拡張機能からの PAUSE および CBCOND 命令を使用できるようにします。

sparcace

sparcace バージョンの SPARC-V9 ISA 用にコンパイルします。

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

sparcaceplus

sparcaceplus バージョンの SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能、SPARCACE 浮動小数点用の SPARC64 X 拡張機能、および SPARCACE 浮動小数点用の SPARC64 X+ 拡張機能からの命令を使用できるようにします。

sparcvis

SPARC-V9 ISA plus VIS 用のコンパイルを行います。

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

sparcvis2

UltraSPARC III 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います。

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

sparcvis3

UltraSPARC III および VIS 3 拡張機能付きの SPARC-V9 ISA 用のコンパイルを行います。

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

sparcfmaf

SPARC-V9 ISA の sparcfmaf バージョン用のコンパイルを行います。

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

コンパイラが自動的に積和演算命令を使用する機会を見つけられるようにするには、-xarch=sparcfmaf および -fma=fused と最適化レベルを組み合わせて使用する必要があります。

sparcima

sparcima 版の SPARC-V9 ISA 用にコンパイルします。

コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令を使用できるようにします。

v9

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

v9a

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

v9b

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

注:

従来の 32 ビット SPARC 命令セットアーキテクチャー V7 および V8 は -m32 を示し、-m64 と組み合わせることはできません。

sparc および sparcvis でコンパイルされたオブジェクトライブラリファイル (.o) はリンクして、まとめて実行できますが、sparcvis 互換性のプラットフォーム上でのみ可能です。

sparcsparcvis、および sparcvis2 でコンパイルされたオブジェクトバイナリファイル (.o) はリンクして、まとめて実行できますが、sparcvis2 互換性のプラットフォーム上でのみ可能です。

特定の設定では、生成された実行可能ファイルが、以前のアーキテクチャーでの実行速度が非常に遅くなる場合があります。また、4 倍精度浮動小数点命令は、これらの命令セットアーキテクチャーの多くで使用できますが、コンパイラは、そのコンパイラが生成したコードではそれらの命令を使用しません。

x86 プラットフォームに固有の値:

avx2

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ、AVX、FSGSBASE、RDRND、F16C、AVX2、BMI1、BMI2、LZCNT、INVPCID、および FMA の命令を使用できます。

avx_i

386、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ AVX、FSGSBASE、RDRND、および F16C の命令を使用できます。

avx

386、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ、smf、AVX の命令を使用できます。

aes

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、および PCLMULQDQ の命令を使用できます。

sse4_2

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、および SSE4.2 の命令を使用できます。

sse4_1

386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、および SSE4.1 の命令を使用できます。

ssse3

386、MMX、Pentium_pro、SSE、SSE2、SSE3、および SSSE3 の命令を使用できます。

sse3

386、MMX、Pentium_pro、SSE、SSE2、および SSE3 の命令を使用できます。

amdsse4a

AMD SSE4a 命令セットを使用します。

sse2

386、MMX、Pentium_pro、SSE、および SSE2 の命令を使用できます。

sse2a

386、MMX、Pentium_pro、SSE、SSE2、および AMD 拡張 (AMD プロセッサ用の 3DNow! と 3DNow! 拡張命令) を使用できます。

amd64

-m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=sse2 と同等の旧バージョンのフラグ。

amd64a

AMD プロセッサで -m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=sse2a と同等の旧バージョンのフラグ。

sse

386、MMX、Pentium_pro、および SSE の命令を使用できます。

ssea

386、MMX、Pentium_pro、SSE、および AMD 拡張 (AMD プロセッサ用の 3DNow! と 3DNow! 拡張命令) を使用できます。

pentium_pro

386、MMX、および Pentium_pro の命令を使用できます。

pentium_proa

386、MMX、Pentium_pro、および AMD 拡張 (AMD プロセッサ用の 3DNow! と 3DNow! 拡張命令) を使用できます。

generic

ほとんどのプロセッサに共通の命令セットを使用します。

generic64

-m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=generic と同等の旧バージョンのフラグ。

native

コンパイラが実行されている現在のシステムプロセッサで使用可能な命令を使用します。

native64

-m64 フラグを利用できるようになる以前に、64 ビットメモリーモデルのコードを取得するために使用された -m64 -xarch=native と同等の旧バージョンのフラグ。

注:

プログラムのいずれかの部分が x86 プラットフォーム上で -m64 でコンパイルまたはリンクされる場合、プログラムのすべての部分もこれらのいずれかのオプションでコンパイルされる必要があります。

各種 Intel 命令セットアーキテクチャー (SSE、SSE2、SSE3、SSSE3 など) の詳細は、Intel-64 および IA-32 の『Intel Architecture Software Developer's Manual』を参照してください。

デフォルト:

-xarch=isa が指定されていない場合のデフォルトは、SPARC プラットフォームでは -xarch=generic、x86 プラットフォームでは -xarch=generic です。

相互の関連性:

このオプションは単体でも使用できますが、-xtarget オプションの展開の一部でもあります。したがって、特定の -xtarget オプションで設定される -xarch のオーバーライドにも使用できます。

たとえば、-xtarget=ultra4-xarch=sparcvis2 -xcache=64/32/4:8192/128/2 -xchip=ultra4 に展開されます。

警告:

このオプションを最適化で使用する場合は、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。ただし、適切な選択をしなかった場合、パフォーマンスが著しく低下するか、あるいは、作成されたバイナリプログラムが目的のすべてのターゲットプラットフォーム上で実行できない可能性があります。

-xautopar

複数プロセッサ用の自動並列化を有効にします。依存関係の解析 (ループの繰り返し内部でのデータ依存関係の解析) およびループ再構成を実行します。最適化が -xO3 以上でない場合、最適化は -xO3 に引き上げられ、警告が発行されます。

-xautopar は OpenMP の並列化指令を受け入れません。

独自のスレッド管理を行なっている場合には、-xautopar を使用しないでください。

実行速度を上げるには、マルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたバイナリの実行速度は低下します。

-xautopar コンパイラオプションによって自動的に並列化されるプログラムを実行する場合に、使用するスレッド数を指定するには、OMP_NUM_THREADS 環境変数を使用します。OMP_NUM_THREADS が設定されない場合、使用されるデフォルトのスレッド数は 2 です。より多くのスレッドを使用するには、OMP_NUM_THREADS をより高い値に設定します。1 つのスレッドだけで実行する場合は、OMP_NUM_THREADS を 1 に設定します。一般的に、OMP_NUM_THREADS は、実行中のシステム上で使用可能な仮想プロセッサ数に設定します。これは、Oracle Solaris の psrinfo(1M) コマンドを使用して判別できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

-xautopar を使用してコンパイルとリンクを一度に実行する場合、リンクには自動的にマイクロタスキングライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xautopar を使用し、コンパイルとリンクを別の手順で行う場合は、リンクでも CC -xautopar を使用する必要があります。

-xbinopt={prepare|off}

(SPARC)このオプションは廃止されたため、コンパイラの将来のリリースで削除されます。-xannotate を参照してください。

あとで最適化、変換、および分析を行えるようにバイナリの準備を整えるよう、コンパイラに指示します (binopt(1) を参照)。このオプションは、実行可能ファイルまたは共有オブジェクトの構築に使用できます。このオプションを有効にするには、最適化レベル -xO1 以上で使用する必要があります。このオプションを使用すると、構築したバイナリのサイズが少し増えます。

コンパイルとリンクを別々に行う場合は、両方の手順に -xbinopt を指定する必要があります。

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

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

-xbinopt=prepare-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。デフォルトは -xbinopt=off です。

-xbuiltin[={%all|%default|%none}]

-xbuiltin オプションは、標準ライブラリ関数を呼び出すコードをさらに最適化するために使用します。このオプションを使用すると、コンパイラは、パフォーマンスに有益な場所で組み込み関数またはインラインシステム関数を置き換えることができます。コンパイラの解説出力を読み取って、どの関数がコンパイラによって置き換えられたかを判定する方法については、er_src(1) のマニュアルページを参照してください。

-xbuiltin=%all を使用した場合、置き換えによって errno の設定が信頼できなくなることがあります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。

-xbuiltin=%default は、errno を設定しない関数のみをインライン化します。errno の値はどの最適化レベルでも常に正確であり、高い信頼度でチェックできます。-xbuiltin=%default-xO3 以下の場合、コンパイラはどの呼び出しをインライン化すると役立つかを判断し、ほかのものはインライン化しません。

-xbuiltin=%none オプションは、ライブラリ関数のすべての置換を無効にします。

-xbuiltin を指定しない場合、デフォルトは、最適化レベル -xO1 以上でコンパイルするときは -xbuiltin=%default -xO0 のときは -xbuiltin=%none です。引数なしで -xbuiltin を指定する場合、デフォルトは -xbuiltin=%all で、コンパイラはより積極的に組み込み関数を置き換えたり、標準ライブラリ関数をインライン化したりします。

-fast を指定してコンパイルすると、-xbuiltin=%all が追加されます。

注: -xbuiltin オプションでは、システムヘッダーファイルで定義されているグローバル関数のみがインライン化され、ユーザーが定義した静的関数は除外されます。グローバル関数に割り込もうとするユーザーコードによって、定義されていない動作になることがあります。

-xcache=c

オプティマイザによって使用されるキャッシュプロパティーを定義します。

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

  • generic

  • native

  • s1/l1/a1[/t1]

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

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

siliai、および ti は次のように定義されます。

si

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

li

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

ai

レベル i のデータキャッシュの結合特性

ti

レベル i でキャッシュを共有するハードウェアスレッドの数。ti パラメータはオプションです。指定しない場合は、値 1 が使用されます。

このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特別なキャッシュ特性が必ず使用されるわけではありません。

このオプションは単独で指定できますが、-xtarget オプションのマクロ展開の一部です。-xtarget オプションによって指定された値をオーバーライドするのが主な目的です。

-xcache の値を次に示します。

generic

ほとんどのプラットフォームで良好なパフォーマンスを得るためのキャッシュ特性を定義します。これはデフォルト値です。

native

ホストプラットフォームで良好なパフォーマンスを得るためのキャッシュ特性を定義します。

s1/l1/a1[/t1]

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

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

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

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

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

-xchar=o

このオプションは、文字型が符号なしと定義されているシステムからのコードの移行を容易に行えるようにする目的のみで提供されています。そのようなシステムからの移植以外では、このオプションは使用しないでください。符号付きまたは符号なしであると明示的に示すように書き直す必要があるのは、符号に依存するコードだけです。

値:

o は次のいずれかの値に置き換えることができます。

signed

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

s

signed と同義です。

unsigned

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

u

unsigned と同義です。

デフォルト:

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

相互の関連性:

-xchar オプションは、-xchar でコンパイルしたコードでのみ、char 型の値の範囲を変更します。このオプションは、システムルーチンまたはヘッダーファイル内のchar型の値の範囲は変更されません。特に、CHAR_MAX および CHAR_MIN の値 (limits.h で定義される) は、このオプションを指定しても変更されません。したがって、CHAR_MAX および CHAR_MIN は、通常の char でエンコード可能な値の範囲は表示されなくなります。

警告:

-xchar を使用するときは、マクロ内の値が符号付きの場合があるため、char を定義済みシステムマクロと比較する際には特に注意してください。これは、マクロを通してアクセスされる、エラーコードを返すすべてのルーチンでもっとも一般的です。エラーコードは、一般的には負の値になっています。したがって、charをそのようなマクロによる値と比較するときは、結果は常に false になります。負の数値が符号なしの型の値と等しくなることはありません。

ライブラリを使用してエクスポートしているインタフェース用のルーチンは、-xchar を使用してコンパイルしないように強くお勧めします。Oracle Solaris ABI はchar型を符号付きとして指定し、それに応じてシステムライブラリが動作します。char を符号なしにする影響は、システムライブラリで十分にテストされていません。このオプションを使用しないで、char型の符号の有無に依存しないようにコードを変更してください。型charの符号は、コンパイラやオペレーティングシステムによって異なります。

-xcheck[=n]

スタックオーバーフローの実行時チェックを有効にします。

値:

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

%all

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

%none

どのチェックも実行しません。

stkovf[action]

実行時にスタックオーバーフローエラーを検出するためのコードを生成します。オプションで、スタックオーバーフローエラーが検出されたときに行うアクションを指定します。

スタックオーバーフローエラーは、スレッドのスタックポインタがスレッドに割り当てられているスタック境界を越えた位置に設定されると発生します。新しいスタックアドレスの先頭が書き込み可能である場合は、エラーが検出されないことがあります。

エラーの直接の結果としてメモリーアクセス違反が発生した場合、スタックオーバーフローエラーが検出され、関連付けられているシグナル (通常は SIGSEGV) が発行されます。このように発生したシグナルは、そのエラーに関連付けられていると言います。

検出されないスタックオーバーフローエラーによって、認識されずにデータが破損している場合があります。検出されないスタックオーバーフローエラーを防ぐには、コンパイルと実行時のサポートが必要となります。

-xcheck=stkovf[action] を指定すると、コンパイラはシステムのページサイズより大きいスタックフレームが使用される場合にスタックオーバーフローエラーを検出するためのコードを生成します。このコードには、無効であるがマップされている可能性があるアドレスにスタックポインタを設定する代わりに、メモリーアクセス違反を強制的に発生させるためのライブラリ呼び出しが含まれています (_stack_grow(3C) を参照)。

オプションの action を指定する場合は、次のいずれかである必要があります。

:detect

action:detect の場合は、そのエラーに通常関連付けられているシグナルハンドラを実行することによって、検出されたスタックオーバーフローエラーが処理されます。

:diagnose

action:diagnose の場合は、関連付けられているシグナルを捕捉し、stack_violation(3C) を呼び出してエラーを診断することによって、検出されたスタックオーバーフローエラーが処理されます。これは action を指定しない場合のデフォルト動作です。

メモリーアクセス違反がスタックオーバーフローエラーと診断されると、次のメッセージが標準エラー出力に出力されます。

ERROR: stack overflow detected: pc=<inst_addr>, sp=<sp_addr>

ここで、<inst_addr> はエラーが検出された命令のアドレスであり、<sp_addr> はエラーが検出されたときのスタックポインタの値です。スタックオーバーフローを検査して前述のメッセージを出力した (該当する場合) あとに、そのエラーに通常関連付けられているシグナルハンドラに制御が渡されます。

-xcheck=stkovf:detect は、システムのページサイズより大きいスタックフレームを持つルーチンに入るときのスタック境界の検査を追加します (_stack_grow(3C) を参照)。追加の境界の検査に関連するコストは、ほとんどのアプリケーションで無視できる程度です。

-xcheck=stkovf:diagnose はスレッドを作成するためのシステムコールを追加します (sigaltstack(2) を参照)。追加のシステムコールに関連するコストは、アプリケーションが新しいスレッドを作成および破棄する頻度によって異なります。

-xcheck=stkovf は Oracle Solaris でのみサポートされます。Linux の C ランタイムライブラリは、スタックオーバーフローの検出をサポートしていません。

no%stkovf

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

init_local

ローカル変数を初期化します。コンパイラが変数を初期化するために使用する事前定義された値のリストについては、『C ユーザーガイド』のこのオプションの説明を参照してください。

no%init_local

ローカル変数を初期化しません。

相互の関連性:

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

-xchip=c

オプティマイザによって使用されるターゲットプロセッサを指定します。

このオプションは単独で指定できますが、-xtarget オプションのマクロ展開の一部です。-xtarget オプションによって指定された値をオーバーライドするのが主な目的です。

このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。

このオプションは、次のものに影響を与えます。

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

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

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

SPARC プラットフォームでの -xchip の値を次に示します。

generic

ほとんどの SPARC プロセッサで良好なパフォーマンスが得られるタイミングプロパティーを使用します。

これはコンパイラに、ほとんどの SPARC プロセッサで良好なパフォーマンスが得られ、それらのどのプロセッサでもパフォーマンスが大幅に低下しない最適なタイミングプロパティーを使用するよう指示するデフォルト値です。

native

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

sparc64vi

SPARC64 VI プロセッサ用に最適化します。

sparc64vii

SPARC64 VII プロセッサ用に最適化します。

sparc64x

SPARC64 X プロセッサ用に最適化します。

sparc64xplus

SPARC64 X+ プロセッサ用に最適化します。

super

SuperSPARC プロセッサ用に最適化します。

super2

SuperSPARC II プロセッサ用に最適化します。

micro

MicroSPARC(TM) プロセッサ用に最適化します。

micro2

MicroSPARC II プロセッサ用に最適化します。

hyper

HyperSPARC(TM) プロセッサ用に最適化します。

hyper2

HyperSPARC II プロセッサ用に最適化します。

ultra

UltraSPARC(TM) プロセッサ用に最適化します。

ultra2

UltraSPARC II プロセッサ用に最適化します。

ultra2e

UltraSPARC IIe プロセッサ用に最適化します。

ultra2i

UltraSPARC IIi プロセッサ用に最適化します。

ultra3

UltraSPARC III プロセッサ用に最適化します。

ultra3cu

UltraSPARC IIIcu プロセッサ用に最適化します。

ultra3i

UltraSPARC IIIi プロセッサ用に最適化します。

ultra4

UltraSPARC IV プロセッサ用に最適化します。

ultra4plus

UltraSPARC IVplus プロセッサ用に最適化します。

ultraT1

UltraSPARC T1 プロセッサ用に最適化します。

ultraT2

UltraSPARC T2 プロセッサ用に最適化します。

ultraT2plus

UltraSPARC T2+ プロセッサ用に最適化します。

T3

SPARC T3 プロセッサ用に最適化します。

T4

SPARC T4 プロセッサ用に最適化します。

T5

SPARC T5 プロセッサ用に最適化します。

M5

SPARC M5 プロセッサ用に最適化します。

sparc64viiplus

SPARC64 VII plus プロセッサ用に最適化します。

注: 次の SPARC の -xchip の値は廃止されており、将来のリリースで削除される可能性があります: ultraultra2ultra2eultra2iultra3ultra3cuultra3iultra4、および ultra4plus

x86 プラットフォームでの -xchip の値を次に示します。

generic

ほとんどの x86 プロセッサで良好なパフォーマンスが得られるように最適化します。

native

このホストプロセッサ用に最適化します。

core2

Intel Core2 プロセッサ用に最適化します。

nehalem

Intel Nehalem プロセッサ用に最適化します。

opteron

AMD Opteron プロセッサ用に最適化します。

penryn

Intel Penryn プロセッサ用に最適化します。

pentium

Intel Pentium プロセッサ用に最適化します。

pentium_pro

Intel Pentium Pro プロセッサ用に最適化します。

pentium3

Intel Pentium 3 プロセッサ用に最適化します。

pentium4

Intel Pentium 4 プロセッサ用に最適化します。

sandybridge

Intel Sandy Bridge プロセッサ用に最適化します

ivybridge

Intel Ivy Bridge プロセッサ用に最適化します。

haswell

Intel Haswell プロセッサ用に最適化します。

westmere

Intel Westmere プロセッサ用に最適化します

amdfam10

AMD FAM10 プロセッサ用に最適化します

-xcode=a

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

注: -xcode=pic13 または -xcode=pic32 を指定することによって、共有オブジェクトを作成することを強くお勧めします。-m64 -xcode=abs64 でも作業可能な共有オブジェクトを構築できますが、それらは効率的ではありません。-m64 -xcode=abs32 または -m64 -xcode=abs44 で構築された共有オブジェクトは機能しません。

次の表に、-xcode の値を示します。

abs32

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

abs44

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

abs64

(SPARC) 64 ビットの絶対アドレスを生成します。これは低速ですが、範囲全体を使用できます。64 ビットのアーキテクチャーでのみ利用できます。

pic13

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

pic32

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

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

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

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

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

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

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

デフォルト:

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

64 ビットプロセッサでのデフォルトは -xcode=abs44 です。

警告:

コンパイルとリンクを別の手順で行う場合は、コンパイルの手順とリンクの手順で同じ -xarch オプションを使用する必要があります。

-xdebugformat=[stabs|dwarf]

このオプションは、コンパイラによって発行されるデバッガ情報の形式を制御するために使用します。デバッガ情報は、-g などのデバッグオプションが使用されたときに発行されます。デバッグオプションなしでも、少量のデバッガ情報が発行されます。

-xdebugformat=stabs は、stab 形式を使用してデバッグ情報を生成します。stab 形式は廃止されており、サポートされなくなりました。

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

デフォルト:

-xdebugformat オプションには引数が必要です。

-xdebugformat を指定しない場合は、コンパイラでは -xdebugformat=dwarf が指定されます。

相互の関連性:

stabs 形式は、g++ ABI (バイナリ形式) を使用している場合は使用できません。-xdebugfomat=stabs-compat=g または -std=v (v の値は任意) のいずれかのオプションとともに指定することはできません。

注:

stab または dwarf 形式の個々のフィールドの詳細な形式は、時間とともに変化する可能性があります。

dumpstabs (1) および dwarfdump (1) のマニュアルページも参照してください。

-xdebuginfo=a[,a...]

デバッグおよび可観測性情報の出力量を制御します。

用語「タグタイプ」は、タグ付きの型 (構造体、共用体、列挙、およびクラス) を意味します。

次のリストには、サブオプション a に指定できる値が含まれています。サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。デフォルトは -xdebuginfo=%none です。サブオプションなしで -xdebuginfo を指定することは禁止されています。

%none

デバッグ情報は生成されません。これはデフォルト値です。

[no%]line

行番号およびファイル情報を出力します。

[no%]param

パラメータの場所の一覧情報を出力します。スカラー値 (たとえば、intchar *) の完全指定の型情報および型名を出力しますが、タグタイプの完全な定義は出力されません。

[no%]variable

構文的にグローバル変数およびローカル変数である変数の場所の一覧情報を出力します。これには、ファイルおよび関数の static は含まれますが、クラスの static および extern は含まれません。スカラー値 (intchar * など) の完全指定の型情報および型名を出力しますが、タグタイプの完全な定義は出力されません。

[no%]decl

関数と変数の宣言、メンバー関数、およびクラス宣言の静的なデータメンバーを出力します。

[no%]tagtype

param および variable データセットから参照されるタグタイプの完全指定の型情報、およびテンプレートの定義を出力します。

[no%]macro

マクロ情報を出力します。

[no%]codetag

DWARF コードタグ (Stabs N_PATCH とも呼ばれます) を出力します。これは、RTC および discover によって使用されるビットフィールド、構造体のコピー、およびスピルに関する情報です。

[no%]hwcprof

ハードウェアカウンタプロファイルに関する重要な情報を生成します。この情報には、ldst_map、ld/st 命令と参照されているシンボルテーブルのエントリのマッピング、およびバックトラックが分岐先を超えていないことを確認するため使用される分岐先アドレスの branch_target テーブルが含まれています。詳細は、-xhwcprof を参照してください。

注: ldst_map の情報を出力するには、タグタイプ情報が存在している必要があります。この要件が満たされていない場合は、ドライバがエラーを発行します。

次のマクロは、-xdebuginfo およびほかのオプションの組み合わせに次のように展開されます。

 
-g = -g2

-gnone =
        -xdebuginfo=%none
        -xglobalize=no
        -xpatchpadding=fix
        -xkeep_unref=no%funcs,no%vars

-g0 =
        -xdebuginfo=line,param,decl,variable,tagtype
        -xglobalize=yes
        -xpatchpadding=fix
        -xkeep_unref=funcs,vars

-g1 =
        -xdebuginfo=line,param,codetag
        -xglobalize=no
        -xpatchpadding=fix
        -xkeep_unref=no%funcs,no%vars

-g2 =
        -xdebuginfo=line,param,decl,variable,tagtype,codetag
        -xglobalize=yes
        -xpatchpadding=fix
        +d      # only if no "-O" flags are present; see +d
        -xkeep_unref=funcs,vars

-g3 =
        -xdebuginfo=line,param,decl,variable,tagtype,codetag,macro
        -xglobalize=yes
        -xpatchpadding=fix
        +d       # only if no "-O" flags are present; see +d
        -xkeep_unref=funcs,vars
-xdepend[=[yes|no] ]

ループの繰り返し内部でのデータ依存関係の解析およびループ再構成を実行します。ループの再構築には、ループ交換、ループ融合、スカラー置換、および「不要な」配列の割り当ての削除が含まれます。

SPARC では、-xdepend-xO3 以上のすべての最適化レベルでオンになり、それより低い最適化レベルではオフになります。また、-xdepend の明示的な設定を指定すると、暗黙的な設定はオーバーライドされます。

x86 では、最適化が -xO3 以上でない場合は、コンパイラは最適化を -xO3 に上げ、警告を発行します。

-xdepend を指定しない場合、デフォルトは -xdepend=no であり、コンパイラがループのデータ依存関係を分析しないことを意味します。-xdepend を指定したが引数を指定しない場合、コンパイラはこのオプションに -xdepend=yes を設定します。これは、ループのデータ依存関係を分析することを意味します。

依存関係の解析は -xautopar に含まれています。依存関係の解析はコンパイル時に実行されます。

依存関係の解析はシングルプロセッサシステムで役立つことがあります。ただし、シングルプロセッサシステム上で -xdepend を試す場合、-xautopar を使用してはいけません。それを行うと、-xdepend の最適化がマルチプロセッサシステムに対して実行されます。

関連項目: -xprefetch_auto_type

-xdumpmacros[=value[,value...]]

マクロがプログラム内でどのように動作しているかを調べたいときに、このオプションを使用します。このオプションは、定義済みマクロ、解除済みマクロ、実際の使用状況といった情報を提供します。マクロの処理順序に従って、標準エラー (stderr) に出力します。-xdumpmacros オプションはファイルの終了まで、または dumpmacrosend_dumpmacros pragma によってオーバーライドされるまで有効です。

値:

サブオプションに適用された接頭辞 no% は、そのサブオプションを無効にします。

[no%]defs

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

[no%]undefs

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

[no%]use

使用されているマクロの情報を出力します

[no%]loc

defs、undefs、および use の位置 (パス名と行番号) も出力します。

[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 と同じ効果があります。

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

デフォルト:

引数なしで -xdumpmacros を指定した場合は、-xdumpmacros=defs,undefs,sys を意味します。-xdumpmacros を指定しない場合は、デフォルトで -xdumpmacros=%none が指定されます。

-xe

構文エラーと意味上の誤りのみをチェックします。-xe を指定した場合、コンパイラはオブジェクトコードを生成しません。-xe の出力は、stderr に送られます。

コンパイルによってオブジェクトファイルを生成する必要がない場合には、-xe オプションを使用してください。たとえば、コードの一部を削除することによってエラーメッセージの原因を切り分ける場合には、-xe を使用することによって編集とコンパイルを高速化できます。

-xF[=v]

-xF オプションは、リンカーによる関数および変数の最適な並べ替えを有効にします。

このオプションは、コンパイラに対して、関数またはデータ変数、あるいはその両方を別々のセクションフラグメントに配置するように指示します。それによってリンカーは、リンカーの -M オプションで指定されたマップファイル内の指示を使用して、これらのセクションの順序を並べ替えてプログラムのパフォーマンスを最適化できます。通常は、この最適化によって効果が上がるのは、プログラムの実行時間の多くがページフォルト時間に費やされている場合だけです。

最適なパフォーマンスを得るために関数と変数の順序を並べ替えるには、次の処理が必要です。

  1. -xF によるコンパイルとリンク

  2. パフォーマンスアナライザ』のマニュアルにある関数のマップファイルを生成する方法に関する指示に従うか、または『リンカーとライブラリ』にあるデータのマップファイルを生成する方法に関する指示に従います。

  3. リンカーの -M オプションを使用して新しいマップファイルを再リンクします。

  4. アナライザで再実行して、パフォーマンスが向上したかどうかを検証します。

値:

サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

v には、次の値のいずれかを指定できます。

[no%]func

関数を個別のセクションにフラグメント化します。

[no%]gbldata

グローバルデータ (外部リンケージを持つ変数) を個別のセクションにフラグメント化します。

[no%]lcldata

ローカルデータ (内部リンケージを持つ変数) を個別のセクションにフラグメント化します。

%all

関数、グローバルデータ、ローカルデータを細分化します。

%none

何も細分化しません。

デフォルト:

-xF を指定しない場合のデフォルトは、-xF=%none です。引数を指定しないで -xF を指定した場合のデフォルトは、-xF=%none,func です。

相互の関連性:

-xF=lcldata を指定するとアドレス計算最適化が一部禁止されるので、このフラグは実験として意味があるときにだけ使用するとよいでしょう。

関連項目:

analyzer(1), ld(1)

-xglobalize[={yes|no}]

ファイルの静的変数のグローバル化を制御します (関数は制御しません)。

グローバル化は修正継続機能および内部手続きの最適化で必要となる手法であり、それによってファイルの静的シンボルがグローバルに拡張されます。同じ名前のシンボルを区別するために、名前に接頭辞が追加されます。

デフォルトは -xglobalize=no です。-xglobalize と指定することは -xglobalize=yes と指定することと同等です。

相互の関連性:

-xpatchpadding を参照してください。

-xipo もグローバル化を要求し、-xglobalize をオーバーライドします。

-xhelp=flags

各コンパイラフラグの簡単な説明を表示します。

-xhwcprof[={enable|disable}]

(SPARC) -xhwcprof オプションは、データ領域プロファイリングに対するコンパイラのサポートを有効にするために使用します。

-xhwcprof を有効にすると、コンパイラは、プロファイル対象のロード命令およびストア命令と、それらが参照するデータ型および構造体メンバーをツールが関連付けるのに役立つ情報を、-g で生成されたシンボル情報と組み合わせて生成します。プロファイルデータは、ターゲットの命令空間ではなく、データ空間と関連付けられ、命令のプロファイリングだけでは入手の容易でない、動作に関する詳細情報が提供されます。

指定した一連のオブジェクトファイルは、-xhwcprof を使用してコンパイルできます。ただし、-xhwcprof がもっとも役立つのは、アプリケーション内のすべてのオブジェクトファイルに適用したときです。このオプションによって、アプリケーションのオブジェクトファイルに分散しているすべてのメモリー参照を識別したり、関連付けたりするカバレージが提供されます。

コンパイルとリンクを別々に行う場合は、-xhwcprof をリンク時にも使用してくだ さい。将来 -xhwcprof に拡張する場合は、リンク時に -xhwcprof を使用する必要があります。

-xhwcprof=enable または -xhwcprof=disable のインスタンスは、同じコマンド行にある以前の -xhwcprof のインスタンスをすべてオーバーライドします。

-xhwcprof はデフォルトでは無効です。引数を指定せずに -xhwcprof と指定することは、-xhwcprof=enable と指定することと同等です。

-xhwcprof を使用する場合は最適化を有効にし、デバッグのデータ形式を dwarf (-xdebugformat=dwarf) に設定しておく必要があります。これは、現在の Oracle Solaris Studio コンパイラのデフォルトです。同じコマンド行に -xhwcprof-xdebugformat=stabs を指定することはできません。

-xhwcprof-xdebuginfo を使用して必要最低限のデバッグ情報を自動的に有効にするため、-g は必要ありません。

-xhwcprof-g を組み合わせて使用すると、コンパイラに必要な一時ファイル記憶領域は、-xhwcprof-g を単独で指定することによって増える量の合計を超えて大きくなります。

-xhwcprof は、次のようにさまざまなよりプリミティブなオプションに展開されるマクロとして実装されます。

 
-xhwcprof
        -xdebuginfo=hwcprof,tagtype,line
-xhwcprof=enable
        -xdebuginfo=hwcprof,tagtype,line
-xhwcprof=disable
        -xdebuginfo=no%hwcprof,no%tagtype,no%line

次のコマンドは example.cc をコンパイルし、ハードウェアカウンタによるプロファイリングのサポートを指定し、DWARF シンボルを使用してデータ型と構造体メンバーのシンボリック解析を指定します。

example% CC -c -O -xhwcprof -g example.cc

ハードウェアカウンタによるプロファイリングについての詳細は、『パフォーマンスアナライザ』のマニュアルを参照してください。

-xia

適切な区間演算ライブラリをリンクし、適した浮動小数点環境を設定します。

-xia オプションは、-fsimple=0 -ftrap=%none -fns=no -library=interval に展開されるマクロです。

相互の関連性:

区間演算ライブラリを使用するには、<suninterval.h> をインクルードします。

区間演算ライブラリを使用する場合は、Cstdiostreams のいずれかのライブラリを含める必要があります。これらのライブラリを含める方法については、-library を参照してください。

警告:

区間を使用し、-fsimple-ftrap、または -fns に異なる値を指定すると、プログラムが正しく動作しないことがあります。

C++ 区間演算は実験に基づくもので発展性があります。詳細は、リリースごとに変更される可能性があります。

x86 プラットフォームでは、32 ビットのコンパイルのために -xarch=sse2 を指定する必要があります。また、Linux プラットフォーム上では -xia を使用できません。

関連項目: -library、『C++ Interval Arithmetic Programming Reference

-xinline[=func_spec[,func_spec...]]

オプティマイザが -xO3 以上でユーザー作成のどのルーチンをインライン化できるかを指定します。

値:

サブオプションに接頭辞 no% を適用すると、そのサブオプションが無効になります。

func_spec には、次のいずれかを指定できます。

%auto

最適化レベル -xO4 以上で自動インライン化を有効にします。この引数は、オプティマイザが選択した関数をインライン化できることをオプティマイザに知らせます。%auto を指定しない場合、コマンド行で明示的なインライン化が指定されているなら、通常、自動インライン化は無効になります。

-xinline=[no%]func_name...
func_name

オプティマイザに関数をインライン化するように強く要求します。関数が extern "C" として宣言されていない場合は、func_name の値を符号化する必要があります。実行可能ファイルに対して nm コマンドを使用すると、符号化された関数名を検索できます。extern "C" で宣言された関数の場合は、名前はコンパイラで符号化されません。

no%func_name

リスト上のルーチン名の前に no% を付けると、そのルーチンのインライン化が禁止されます。func_name の符号化された名前に関する規則は、no%func_name にも適用されます。

-xipo[=1|2] を使用していないかぎり、コンパイル中のファイル内のルーチンのみがインライン化の対象と見なされます。オプティマイザでは、どのルーチンがインライン化に適しているかを判断します。

デフォルト:

-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 以上では、オプティマイザは -xinline オプションが指定されていなくても、どの関数をインライン化すべきかを判定します。-xO4 以上ではまた、コンパイラは、どの関数をインライン化すればパフォーマンスが向上するかの判定も試みます。

ルーチンは、次のいずれかの条件が当てはまる場合はインライン化されます。

  • 最適化が -xO3 以上に設定されている

  • インライン化に効果があって安全

  • 関数がコンパイル中のファイル内にあるか、または関数が -xipo[=1|2] でコンパイルされたファイル内にある。

警告:

-xinline で関数を強制的にインライン化した場合、実際にはパフォーマンスが低下する可能性があります。

関連項目: -xldscope

-xinline_param=a[,a[,a]...]

このオプションは、コンパイラが関数呼び出しをインライン化するタイミングを判断するために使用するヒューリスティックを手動で変更するために使用します。

このオプションは -O3 以上でのみ有効となります。次のサブオプションは、自動インライン化がオンである場合に、-O4 以上でのみ有効となります。

次のサブオプションでは、n は正の整数である必要があります。a には次のいずれかを指定できます。

default

すべてのサブオプションの値にそのデフォルト値を設定します。

max_inst_hard[:n]

自動インライン化は、n 疑似命令 (コンパイラの内部表現でカウントされます) より小さい関数のみをインライン化候補と見なします。

これより大きい関数は、インライン化の候補から常に除外されます。

max_inst_soft[:n]

インライン関数のサイズ制限に n 擬似命令 (コンパイラの内部表現でカウントされます) を設定します。

これより大きいサイズの関数はインライン化されることがあります。

max_inst_hard を指定する場合、max_inst_soft の値は max_inst_hard の値以下になるようにします (つまり、max_inst_soft <= max_inst_hard)。

通常、コンパイラの自動インライン化では、呼び出される関数のサイズが max_inst_soft の値より小さい呼び出しのみがインライン化されます。関数のサイズが max_inst_soft の値より大きいが max_inst_hard の値より小さい場合は、関数がインライン化されることがあります。この場合の例は、関数に渡されたパラメータが定数である場合です。

関数の特定の 1 つの呼び出しサイトをインライン化するために max_inst_hard または max_inst_soft の値を変更するかどうかを判断する場合は、-xinline_report=2 を使用して詳細なインライン化メッセージを出力し、そのインライン化メッセージの推奨に従います。

max_function_inst[:n]

自動インライン化によって、関数が最大 n 疑似命令 (コンパイラの内部表現でカウントされます) まで増えることを許可します。

max_growth[:n]

自動インライン化は、プログラムのサイズを最大 n% (サイズは疑似命令で計測されます) 増やすことを許可されます。

min_counter[:n]

関数を自動インライン化するかどうかを判断するために、プロファイリングフィードバック (-xprofile) によって計測される、呼び出しサイトの最小頻度カウンタ。

このオプションは、アプリケーションがプロファイリングフィードバック (-xprofile=use) を指定してコンパイルされている場合にのみ有効です。

level[:n]

このサブオプションは、自動インライン化を適用する度合いを制御するために使用します。-xinline_param=level の設定を高くすると、より多くの関数がインライン化されます。

n は 1、2、または 3 のいずれかである必要があります。

このオプションを指定しない場合、または :n を使用せずに指定した場合、n のデフォルト値は 2 です。

自動インライン化のレベルを指定します

 
level:1    basic inlining
level:2    medium inlining (default)
level:3    aggressive inlining

このレベルによって、次のインライン化パラメータの組み合わせに指定される値が決定されます。

 

max_growth
+ max_function_inst
+ max_inst
+ max_inst_call

level = 1 の場合、すべてのパラメータはデフォルト値の半分になります。

level = 2 の場合、すべてのパラメータはデフォルト値になります。

level = 3 の場合、すべてのパラメータはデフォルト値の 2 倍になります。

max_recursive_depth[:n]

関数がそれ自体を直接または間接に呼び出している場合は、再帰呼び出しが発生していると言います。

このサブオプションは、再帰呼び出しを最大 n レベルまで自動的にインライン化することを許可します。

max_recursive_inst[:n]

自動再帰インライン化を実行することによって、再帰呼び出しの呼び出し元で増やすことができる疑似命令 (コンパイラの内部表現でカウントされます) の最大数を指定します。

max_recursive_inst および max_recursive_depth の間で相互作用が発生した場合、再帰関数呼び出しは、再帰呼び出しの max_recursive_depth の数まで、またはインライン化される関数のサイズが max_recursive_inst を超えるまでインライン化されます。これらの 2 つのパラメータの設定は、小さい再帰関数のインライン化の度合いを制御します。

-xinline_param=default を指定すると、コンパイラはサブオプションのすべての値にデフォルト値を設定します。

このオプションを指定しない場合、デフォルトは -xinline_param=default です。

値およびオプションのリストは、左から右に適用されます。このため、次の指定では

-xinline_param=max_inst_hard:30,..,max_inst_hard:50

max_inst_hard:50 がコンパイラに渡されます。

コマンド行に複数の -xinline_param オプションを指定した場合、サブオプションのリストは同様に左から右に適用されます。たとえば、次のように指定した場合は

 
-xinline_param=max_inst_hard:50,min_counter:70 ...
   -xinline_param=max_growth:100,max_inst_hard:100

次の指定と同じになります。

-xinline_param=max_inst_hard:100,min_counter:70,max_growth:100
-xinline_report[=n]

このオプションは、コンパイラによる関数のインライン化に関する報告を生成し、標準出力に書き込みます。報告のタイプは n の値 (0、1、または 2) によって異なります。

0

レポートは生成されません。

1

インライン化パラメータのデフォルト値のサマリー報告が生成されます。

2

インライン化メッセージの詳細な報告が生成され、インライン化された呼び出しサイトとインライン化されなかった呼び出しサイト、およびインライン化されなかったことの簡潔な理由が示されます。この報告には、インライン化されなかった呼び出しサイトをインライン化するために使用できる -xinline_param の推奨値が含まれている場合があります。

-xinline_report を指定しない場合、n のデフォルト値は 0 です。-xinline_report を指定して =n を指定しない場合、デフォルト値は 1 です。

-xlinkopt が指定されている場合は、インライン化されなかった呼び出しサイトに関するインライン化メッセージが正確でないことがあります。

レポートは、-xinline_param オプションで制御可能なヒューリスティックに従うコンパイラによって実行されたインライン化に制限されます。その他の理由でコンパイラによってインライン化された呼び出しサイトは報告されない可能性があります。

-xinstrument=[no%]datarace]

スレッドアナライザで分析するためにプログラムをコンパイルして計測するには、このオプションを指定します。スレッドアナライザの詳細は、tha(1) のマニュアルページを参照してください。

次に、パフォーマンスアナライザを使用して、計測されるプログラムを collect -r races で実行することによってデータ競合検出の実験を作成することができます。計測されたコードをスタンドアロンで実行できますが、低速で実行されます。

値:

datarace

スレッドアナライザによる分析のためにコードを準備し、__THA_NOTIFY を定義します。

no%datarace

これはデフォルト値です。スレッドアナライザによる分析のためにコードを準備せず、__THA_NOTIFY も定義しません。

相互の関連性:

コンパイルとリンクを別々に行う場合は、両方の手順で -xinstrument=datarace を指定してください。

このオプションは、プリプロセッサトークン __THA_NOTIFY を定義します。#ifdef __THA_NOTIFY を指定して、libtha(3) ルーチンへの呼び出しを保護できます。

このオプションは -g0 も設定します。

警告:

-xinstrument を引数なしで指定することは不正です。

-xipo[={0|1|2}]

内部手続きの最適化を実行します。

-xipo オプションは、内部手続きの分析パスを呼び出すことによってプログラムの一部の最適化を実行します。このオプションを指定すると、リンク手順でのすべてのオブジェクトファイル間の最適化を行い、しかもこれらの最適化は単にコンパイルコマンドのソースファイルにとどまりません。ただし、-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 つのすべてのソースファイル間でファイル間のインライン化を実行します。これはリンクの手順の最後で行われるため、ソースファイルのコンパイルをすべて 1 回のコンパイルで実行する必要はなく、それぞれで -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 を有効にするには、これを両方の手順で指定する必要があります。-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.cctwo.ccthree.cc の間、および main.ccfour.cc の間で実行されますが、main.cc または four.ccmylib. 内のルーチンの間では実行されません。最初のコンパイルによって未定義のシンボルに関する警告が生成される可能性がありますが、コンパイルとリンクの手順である内部手続きの最適化は実行されます。

-xipo オプションでは、ファイルにまたがる最適化を実行するために必要な追加情報のために、非常に大きなオブジェクトファイルが生成されます。ただし、この補足情報は最終的な実行可能バイナリファイルの一部にはなりません。実行可能プログラムのサイズの増加は、そのほかに最適化を実行したことに起因します。

-xipo=2 による内部手続き解析を行うべきでないケース:

内部手続き解析では、コンパイラは、リンクステップでオブジェクトファイル群を操作しながら、プログラム全体の解析と最適化を試みます。このとき、コンパイラは、このオブジェクトファイル群に定義されているすべての foo() 関数 (またはサブルーチン) に関して次の 2 つのことを仮定します。

  1. 実行時、このオブジェクトファイル群の外部で定義されている別のルーチンによって foo() が明示的に呼び出されない。

  2. オブジェクトファイル群内のルーチンからの foo() 呼び出しが、そのオブジェクトファイル群の外部に定義されている別のバージョンの foo() によって置き換えられることがない。

特定のアプリケーションについて前提 (1) が当てはまらない場合は、-xipo=2 を使用してコンパイルしないでください。

仮定 (2) が真でない場合は、-xipo=1 または -xipo=2 でコンパイルしないでください。

1 例として、独自のバージョンの malloc() で関数 malloc() を置き換え、-xipo=2 を指定してコンパイルするケースを考えてみましょう。-xipo=2 を使ってコンパイルする場合、その独自のコードとリンクされる malloc() を参照する、あらゆるライブラリのあらゆる関数のコンパイルで -xipo=2 を使用する必要があるとともに、リンクステップでそれらのオブジェクトファイルが必要になります。この方法はシステムライブラリには使用できない可能性があるため、独自のバージョンの malloc() を -xipo=2 を使用してコンパイルしないでください。

もう 1 つの例として、別々のソースファイルにある foo() および bar() という 2 つの外部呼び出しを含む共有ライブラリを構築するケースを考えてみましょう。また、bar() は foo() を呼び出すと仮定します。foo() が実行時に割り込み処理される可能性がある場合、foo() または bar() のソースファイルを -xipo=1 または -xipo=2 でコンパイルしないでください。それ以外の場合、foo() が bar() にインライン化され、それによって正しくない結果になる可能性があります。

-xipo_archive[=a]

新しい -xipo_archive オプションは、実行可能ファイルを生成する前に、-xipo を付けてコンパイルされ、アーカイブライブラリ (.a) の中に存在しているオブジェクトファイルを使用してリンカーに渡すオブジェクトファイルを最適化します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルはすべて、その最適化されたバージョンに置き換えられます。

a には、次のいずれかを指定できます。

writeback

実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルは、すべてその最適化されたバージョンに置き換えられます。

アーカイブライブラリの共通セットを使用する並列リンクでは、最適化されるアーカイブライブラリの独自のコピーを、各リンクでリンク前に作成する必要があります。

readonly

実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。

-xipo_archive=readonly オプションによって、リンク時に指定されたアーカイブライブラリのオブジェクトファイルに対する、モジュール相互のインライン化および内部手続きデータフロー解析が有効になります。ただし、モジュール間のインライン化によってほかのモジュールに挿入されたコード以外のアーカイブライブラリのコードに対する、モジュール間の最適化は有効になりません。

アーカイブライブラリ内のコードにモジュール相互の最適化を適用するには、-xipo_archive=writeback を指定する必要があります。これを行うと、コードが抽出されたアーカイブライブラリの内容が変更されることがあります。

none

デフォルト。アーカイブファイルの処理は行いません。コンパイラは、-xipo を使用してコンパイルされたオブジェクトファイル、およびリンク時にアーカイブライブラリから抽出されたオブジェクトファイルに対して、モジュール相互のインライン化または最適化を適用しません。これを適用するには、-xipo と、-xipo_archive=readonly または -xipo_archive=writeback のいずれかをリンク時に指定する必要があります。

-xipo_archive をフラグなしで指定することは不正です。

-xipo_build=[yes|no]

-xipo_build を指定せずに -xipo を使用すると、コンパイラを通じて 2 回受け渡しが行われることになります (オブジェクトファイルを生成するとき、およびリンク時にファイル間の最適化を実行するとき)。-xipo_build を設定すると、最初の受け渡し時には最適化されず、リンク時にのみ最適化されることによって、コンパイルの時間が短縮されます。-xipo を指定するとリンク時に最適化が実行されるため、オブジェクトファイルを最適化する必要はありません。-xipo_build を指定して作成された最適化されていないオブジェクトファイルを -xipo を指定せずにリンクして最適化すると、アプリケーションのリンクが未解決のシンボルエラーで失敗します。

例:

次の例では、.o ファイルの高速ビルドを実行し、リンク時にファイル間の最適化を行なっています。

 
% cc -O -xipo -xipo_build -o code1.o -c code1.c
% cc -O -xipo -xipo_build -o code2.o -c code2.c
% cc -O -xipo -o a.out code1.o code2.o

-xipo_build は、.o ファイルを作成するときに -O をオフにして、ファイルを迅速に作成します。完全な -O の最適化は、-xipo のファイル間の最適化の一部としてリンク時に実行されます。

次の例は、-xipo を使用せずにリンクしています。

 
% cc -O -o a.out code1.o code2.o

-xipo_build を指定して code1.o または code2.o を生成した場合、リンク時にエラーになり、シンボル __unoptimized_object_file が未解決であることが示されます。

.o ファイルを別々に作成する場合、デフォルトの動作は -xipo_build=no です。ただし、実行可能ファイルまたはライブラリがソースファイルから 1 回の受け渡しで作成された場合は、-xipo_build が暗黙的に有効になります。例:

 
% cc -fast -xipo a.c b.c c.c

この場合、a.ob.o、および c.o が生成される最初の受け渡しで、-xipo_build=yes が暗黙的に有効になります。この動作を無効にするには、オプション -xipo_build=no を含めます。

-xivdep[=p]

ivdep プラグマの解釈を無効または設定します。

ivdep プラグマは、最適化の目的でループ内で検出された、配列参照へのループがもたらす依存関係の一部またはすべてを無視するようにコンパイラに指示します。これによってコンパイラは、マイクロベクトル化、分散、ソフトウェアパイプラインなど、それ以外の場合は不可能なさまざまなループ最適化を実行できます。これは、依存関係が重要ではない、または依存関係が実際に発生しないことをユーザーが把握している場合に使用されます。

#pragma ivdep 指令の解釈は、-xivdep オプションの値に応じて異なります。

p の次の値は、次のように解釈されます。

loop

ループキャリーのベクトル依存関係と想定されるものを無視します。

loop_any

ループキャリーのベクトル依存関係をすべて無視します。

back

逆方向のループキャリーのベクトル依存関係と想定されるものを無視します。

back_any

逆方向のループキャリーのベクトル依存関係をすべて無視します。

none

依存関係を無視しません (ivdep プラグマの無効化)。

これらの解釈は、ほかのベンダーの ivdep プラグマの解釈との互換性のために提供されます。

-xjobs={n|auto}

複数のプロセスでコンパイルします。このフラグを指定しない場合、デフォルトの動作は -xjobs=auto です。

コンパイラが処理を行うために生成するプロセスの数を設定するには、-xjobs オプションを指定します。このオプションを使用すると、マルチ CPU マシン上での構築時間を短縮できます。現時点では、-xjobs とともに使用できるのは -xipo オプションだけです。-xjobs=n を指定すると、内部手続きオプティマイザ は、さまざまなファイルをコンパイルするために呼び出せるコードジェネレータインスタンスの最大数として n を使用します。

一般に、n に指定する確実な値は、使用できるプロセッサ数に 1.5 を掛けた数です。生成されたジョブ間のコンテキスト切り替えにより生じるオーバーヘッドのため、使用できるプロセッサ数の何倍もの値を指定すると、パフォーマンスが低下することがあります。また、あまり大きな数を使用すると、スワップ領域などシステムリソースの限界を超える場合があります。

-xjobs=auto を指定すると、コンパイラは適切な並列ジョブの数を自動的に選択します。

-xjobs には必ず値を指定する必要があります。値を指定しないと、エラー診断が表示され、コンパイルは中止します。

-xjobs を指定しない場合、デフォルトの動作は -xjobs=auto です。これは、コマンド行に -xjobs=n を追加することによってオーバーライドできます。コマンド行で複数の -xjobs の指定がある場合、一番右にあるインスタンスの指定によってオーバーライドされます。

例:

次の例は、-xipo に最大 3 つの並列プロセスを使用しています。

 
% cc -xipo -xO4 -xjobs=3 t1.o t2.o t3.o

次の例は、-xipo に単一のプロセスを順次リンクしています。

 
% cc -xipo -xO4 -xjobs=1 t1.o t2.o t3.o

次の例は、コンパイラが -xipo のジョブ数を選択して、並列でリンクしています。

 
% cc -xipo -xO4  t1.o t2.o t3.o

これは、-xjobs=auto を明示的に指定したときの動作とまったく同じです。

 
% cc -xipo -xO4 -xjobs=auto t1.o t2.o t3.o
-xkeep_unref[={[no%]funcs, [no%]vars}]

参照されない関数および変数の定義を維持します。接頭辞 no%は、その定義を場合によっては削除することをコンパイラに許可します。

デフォルトは no%funcs,no%vars です。-xkeep_unref を指定することは -xkeep_unref=funcs,vars を指定することと同等であり、-keep_unref によってすべてが維持されることを意味します。

-xkeepframe[=[%all,%none,function_name,no%function_name]]

指定した関数のスタック関連の最適化を禁止します。

%all を指定すると、すべてのコードでスタック関連の最適化を禁止します。%none を指定すると、すべてのコードでスタック関連の最適化を許可します。

このオプションがコマンド行で指定されていないと、コンパイラは -xkeepframe=%none を使用します。

このオプションがコマンド行に値なしで指定されると、コンパイラは -xkeepframe=%all を使用します。

このオプションは累積的で、コマンド行で複数回指定できます。例:

-xkeepframe=%all -xkeepframe=no%func1

は、スタックフレームが func1 を除くすべての関数で保持されることを示します。また、-xkeepframe-xregs=frameptr をオーバーライドします。例:

-xkeepframe=%all -xregs=frameptr

は、すべての関数のスタックを保持しますが、-xregs=frameptr の最適化は行われないことを示します。

-xlang=language[,language]

該当する実行時ライブラリをインクルードし、指定された言語に適切な実行時環境を用意します。

language は、f77f90f95c99 のいずれかである必要があります。

-f90 引数と -f95 引数は同等です。c99 引数は、cc -std=c99 または cc -xc99=%all でコンパイルされ、CC でリンクされているオブジェクトに対して ISO 9899:1999 C プログラミング言語の動作を呼び出します。

相互の関連性:

-xlang=f90 および -xlang=f95 オプションは -library=f90 を示し、-xlang=f77 オプションは -library=f77 を示します。ただし、正しい実行環境が保証されるのは -xlang オプションだけであるため、言語が混合したリンクには -library=f77 および -library=f90 オプションは不十分です。

言語が混合したリンクの場合、ドライバは次の順序で言語階層を使用してください。

C++

CC コマンドを使用します。

Fortran 95 (または Fortran 90)

f95 コマンドを使用します。詳細は、 f95(1) を参照してください。

Fortran 77

f95 -xlang=f77 を使用します。詳細は、 f95(1) を参照してください。

C

cc コマンドを使用します。詳細は、cc(1) を参照してください。

Fortran 95、FORTRAN 77、および C++ のオブジェクトファイルを一緒にリンクする場合は、最上位言語のドライバを使用します。たとえば、C++ と Fortran 95 のオブジェクトファイルをリンクするには、次の C++ コンパイラコマンドを使用します。

example% CC -xlang=f95...

Fortran 95 と Fortran 77 のオブジェクトファイルをリンクするには、次のように Fortran 95 ドライバを使用します。

example% f95 -xlang=f77...

-xlang オプションと -xlic_lib オプションを同じコンパイラコマンドで使用することはできません。-xlang を使用しており、かつ Sun Performance Library でリンクする必要がある場合は、代わりに -library=sunperf を使用してください。

警告:

-xnolib-xlang とともに使用しないでください。

Fortran 並列オブジェクトを C++ オブジェクトと混在させている場合は、リンク行で -mt flag を指定する必要があります。

関連項目: -library-staticlib

-xldscope={v}

外部シンボルの定義に対するデフォルトのリンカースコープを変更します。デフォルトを変更すると、実装がよりうまく隠されるので、より早く、より安全に共有ライブラリを使用できます。

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

global

シンボル定義に、もっとも制限の少ないリンカースコープであるグローバルリンカースコープが含まれています。シンボル参照はすべて、そのシンボルが定義されている最初の動的ロードモジュール内の定義と結合します。このリンカースコープは、extern シンボルの現在のリンカースコープです。

symbolic

シンボル定義に、グローバルリンカースコープより制限的なシンボリックリンカースコープが含まれています。リンク対象の動的ロードモジュール内からのシンボルへの参照はすべて、そのモジュール内に定義されているシンボルと結合します。モジュール外については、シンボルはグローバルなものとなります。このリンカースコープはリンカーオプション -Bsymbolic に対応します。C++ ライブラリでは -Bsymbolic を使用できませんが、-xldscope=symbolic オプションは問題なく使用できます。

hidden

隠蔽リンカースコープは、シンボリックリンカースコープやグローバルリンカースコープよりも制限されたリンカースコープです。動的ロードモジュール内の参照はすべて、そのモジュール内の定義にバインドされます。シンボルはモジュールの外側では認識されません。

デフォルト:

-xldscope を指定しない場合は、コンパイラでは -xldscope=global が指定されます。値を指定しないで -xldscope を指定すると、コンパイラがエラーを出力します。コマンド行にこのオプションの複数のインスタンスがある場合、一番右にあるインスタンスが実行されるまで相互にオーバーライドします。

警告:

クライアントがライブラリ内の関数をオーバーライドできるようにする場合は必ず、ライブラリの構築時に関数がインラインで生成されないようにしてください。コンパイラが関数をインライン化するのは、-xinline で関数名を指定した場合、-xO4 以上でコンパイルする場合 (その場合は、インライン化を自動的に実行できます)、インライン指示子を使用した場合、またはファイル間の最適化を使用している場合です。

たとえば、ABC というライブラリにデフォルトの allocator 関数があり、ライブラリクライアントがその関数を使用でき、ライブラリの内部でも使用されるものとします。

void* ABC_allocator(size_t size) { return malloc(size); }

-xO4 以上でライブラリを構築すると、コンパイラはライブラリコンポーネント内での ABC_allocator の呼び出しをインライン化します。ライブラリクライアントが ABC_allocator を独自の allocator と置き換える場合、置き換えられた allocator は ABC_allocator を呼び出したライブラリコンポーネント内では実行されません。最終的なプログラムには、この関数の相異なるバージョンが含まれることになります。

__hidden 指定子または __symbolic 指定子で宣言されたライブラリ関数は、ライブラリの構築時にインラインで生成できます。これらがクライアントによって上書きされることは想定されていません。詳細は、『C++ ユーザーズガイド』の第 4 章「言語拡張」を参照してください。

__global 指定子で宣言されたライブラリ関数はインラインで宣言しないでください。また、-xinline コンパイラオプションを使用することによってインライン化されることがないようにしてください。

関連項目: -xinline, -xOld (1) 。

-xlibmieee

例外時に libm が数学ルーチンに対し IEEE 754 値を返します。libm のデフォルト動作は XPG に準拠します。

このオプションは、特定の浮動小数点数学ライブラリルーチンによって設定される errno 変数の値に影響を与えます。詳細は、このマニュアルページの最後の「注意事項」のセクションを参照してください。

-xlibmil

選択されたライブラリルーチンを最適化のためにインライン化します。

一部の libm ライブラリルーチンには、インラインテンプレートが存在します。このオプションにより、現在使用されている浮動小数点オプションとプラットフォームでもっとも高速な実行可能ファイルを生成するインラインテンプレートが選択されます。

注: このオプションは、C++ インライン関数には影響を与えません。このオプションは、特定の浮動小数点数学ライブラリルーチンによって設定される errno 変数の値に影響を与えます。詳細は、このマニュアルページの最後の「注意事項」のセクションを参照してください。

-xlibmopt

最適化された数学ルーチンライブラリを使用します。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

このオプションは、パフォーマンスのために最適化された数学ルーチンライブラリを使用し、通常はより高速なコードを生成します。この結果は、通常の数学ライブラリが生成する結果と少し異なることがあります。その場合、通常、異なるのは最後のビットです。

このライブラリオプションをコマンド行に指定する順序は重要ではありません。

相互の関連性:

このオプションは、-fast オプションで暗黙に指定されます。

関連項目: -fast-xnolibmopt

このオプションは、特定の浮動小数点数学ライブラリルーチンによって設定される errno 変数の値に影響を与えます。詳細は、このマニュアルページの最後の「注意事項」のセクションを参照してください。

-xlic_lib=sunperf

非推奨。使用しないでください。代わりに、-library=sunperf を指定します。

-xlicinfo

このオプションは、コンパイル時には暗黙的に無視されます。

-xlinkopt[=level]

再配置可能なオブジェクトファイルに対してリンク時の最適化を実行します。

リンクオプティマイザは、リンク時にバイナリオブジェクトコードに対して、いくつかの高度なパフォーマンス最適化を実行します。値 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 です。

-xlinkopt でコンパイルする場合は、-zcombreloc リンカーオプションは使用しないでください。

-xlinkopt をリンク時に有効にするには、少なくともコンパイルコマンドで -xlinkopt を使用する必要があります。-xlinkopt を指定しないでコンパイルされたオブジェクトバイナリについても、オプティマイザは限定的な最適化を実行できます。

-xlinkopt は、コンパイラのコマンド行で指定される静的ライブラリのコードを最適化しますが、コマンド行で指定される共有 (動的) ライブラリのコードはスキップして最適化しません。-xlinkopt はまた、共有ライブラリを構築する (-G でコンパイルする) 場合にも使用できます。

リンクオプティマイザは、実行時のプロファイルフィードバックとともに使用された場合にもっとも効果的です。プロファイリングによって、コードでもっともよく使用される部分ともっとも使用されない部分が明らかになるので、オプティマイザはそれに基づき処理を集中するよう指示されます。これは、リンク時に実行されるコードの最適な配置が命令のキャッシュミスを低減できるような、大きなアプリケーションにとって特に重要です。このようなコンパイルの例を次に示します。

 
example% CC -o progt -xO5 -xprofile=collect:profdir file.cc
example% progt
example% CC -o prog -xO5 -xprofile=use:profdir -xlinkopt file.cc

プロファイルのフィードバックの使用についての詳細は、-xprofile を参照してください。

このオプションを指定してコンパイルすると、リンク時間がわずかに増えます。オブジェクトファイルも大きくなりますが、実行可能ファイルのサイズは変わりません。-xlinkopt-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。

-xloopinfo

並列化されているループとされていないループを示します。このオプションは、通常、-xautopar オプションとともに使用します。

-xM

指定された C++ プログラムに対してプリプロセッサのみを実行し、Makefile の依存関係を生成してその結果を標準出力に送信することをリクエストします (Makefile と依存関係の詳細は、make (1) を参照)。

ただし、-xM では、インクルードヘッダーの依存関係のみが報告され、関連付けられたテンプレート定義ファイルの依存関係は報告されません。Makefile 内の .KEEP_STATE 機能を使用して、make によって作成された .make.state ファイル内のすべての依存関係を生成することができます。

makefile と依存関係の詳細は、 make(1S) を参照してください。

-xM1

このオプションは、このオプションでは /usr/include ヘッダーファイルの依存関係や、コンパイラで提供されるヘッダーファイルの依存関係が報告されない点を除き、-xM と同じです。

-xMD

-xM と同様にメイクファイルの依存関係を生成しますが、コンパイルを続行します。-xMD は、指定されている場合は -o 出力ファイル名から派生したメイクファイルの依存関係情報の出力ファイルを生成します。または、ファイル名接尾辞を .d に置換 (または追加) して、入力元ファイル名を生成します。-xMD-xMF を指定する場合、-xMF で指定したファイルに、プリプロセッサはすべての Makefile の依存関係情報を書き込みます。複数のソースファイルを使って -xMD -xMF または -xMD -o filename でコンパイルすることは許可されず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

-xMF filename

Makefile の依存関係の出力先ファイルを指定するには、このオプションを使用します。1 つのコマンド行で、複数の入力ファイルに対して -xMF で個別のファイル名を指定することはできません。複数のソースファイルで -xMD -xMF または -xMMD -xMF を使用してコンパイルすることはできず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

このオプションは -xM または -xM1 とともに使用できません。

-xMMD

システムヘッダーファイルを除き、Makefile の依存関係を生成するには、このオプションを使用します。このオプションは -xM1 と同じ機能ですが、コンパイルは続行されます。-xMMD は、-o 出力ファイル名 (指定されている場合) または入力ソースファイル名から派生した Makefile の依存関係情報のための出力ファイルを生成して、ファイル名接尾辞を .d に置き換え (または追加) します。-xMF を指定する場合、コンパイラは代わりに、ユーザーが指定したファイル名を使用します。複数のソースファイルで -xMMD -xMF または -xMMD -o filename を使用してコンパイルすることはできず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

-xMerge

データセグメントをテキストセグメントにマージします。

オブジェクトファイル内のデータは読み取り専用であり、ld -N を使用してリンクしないかぎりプロセス間で共有されます。

-xMerge-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

-xmaxopt[=v]

このコマンドは、pragma opt のレベルを指定されたレベルに制限します。v は、off12345 のいずれかである必要があります。デフォルト値は -xmaxopt=off であり、pragma opt は無視されます。引数を指定せずに -xmaxopt を指定した場合は、-xmaxopt=5 を指定することと同等です。

-xmemalign[=ab]

(SPARC) データの境界整列についてコンパイラが行う想定を制御するには、-xmemalign オプションを使用します。境界整列が潜在的に正しくないメモリーアクセスにつながる生成コードを制御し、境界整列が正しくないアクセスが発生したときのプログラム動作を制御すれば、より簡単に SPARC にコードを移植できます。

メモリーの予想される最大境界整列と境界整列していないデータアクセスの動作を指定します。a (境界整列) と b (動作) の両方の値を指定する必要があります。a は、最大想定メモリー境界整列を指定します。b は、不正境界整列メモリーアクセスの動作を指定します。

コンパイル時に境界整列が判別できるメモリーへのアクセスの場合、コンパイラはそのデータの境界整列に適したロードおよびストア命令を生成します。

境界整列がコンパイル時に決定できないメモリーアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。

実行時の実際のデータ境界整列が指定された整列に達しない場合、境界整列に失敗したアクセス (メモリー読み取りまたは書き込み) が行われると、トラップが発生します。このトラップに対して発生する可能性のある応答は次の 2 つです。

  • OS がトラップを SIGBUS シグナルに変換します。プログラムがこのシグナルを捕捉しなかった場合、プログラムは異常終了します。プログラムがシグナルを捕捉しても、境界整列に失敗したアクセスが成功するわけではありません。

  • 境界整列に失敗したアクセスが正常に成功したかのように OS がアクセスを解釈し、プログラムに制御を戻すことによってトラップを処理します。

に使用可能な値は次のとおりです。

1

最大 1 バイトの境界整列

2

最大 2 バイトの境界整列

4

最大 4 バイトの境界整列

8

最大 8 バイトの境界整列

16

最大 16 バイトの境界整列

b に受け入れられる値を次に示します。

i

アクセスを解釈し、実行を継続する

s

シグナル SIGBUS を発生させます。

f

64 ビットの SPARC プログラム (-m64) の場合のみ。4 バイト以下の境界整列にだけ SIGBUS 信号を発生させます。それ以外ではアクセスを解釈して実行を継続します。32 ビットプログラムの場合、f フラグは i と同等です。

bif のいずれかに設定してコンパイルしたオブジェクトファイルにリンクする場合は、必ず、-xmemalign を指定する必要があります。コンパイル時とリンク時の両方で指定する必要のあるコンパイラオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

デフォルト:

SPARC 64 ビットプログラム (-m64) の場合のデフォルトは、-xmemalign=8s です。

SPARC 32 ビットプログラム (-m32) の場合のデフォルトは、-xmemalign=8i です。

-xmemalign を使用したが値を指定しない場合、すべてのプラットフォームでデフォルトは -xmemalign=1i です。

-xmodel=[a]

(x86) -xmodel オプションは、Oracle Solaris x64 プラットフォーム上の共有オブジェクトのデータアドレスモデルを決定します。そのようなオブジェクトのコンパイルにのみ指定してください。

このオプションは、64 ビット対応の x64 プロセッサで -m64 も指定した場合にのみ有効です。

a には、次のいずれかを指定できます。

small

このオプションは、実行されるコードの仮想アドレスがリンク時にわかっていて、すべてのシンボルが 0 ~ 2^31 - 2^24 - 1 の範囲の仮想アドレスに配置されることがわかっているスモールモデルのコードを生成します。

kernel

すべてのシンボルが 2^64 - 2^31 ~ 2^64 - 2^24 の範囲で定義されるカーネルモデルのコードを生成します。

medium

データセクションへのシンボリック参照の範囲に関する前提がないミディアムモデルのコードを生成します。テキストセクションのサイズとアドレスは、スモールコードモデルの場合と同じように制限されます。静的データが大量にあるアプリケーションでは、-m64 を指定してコンパイルするときに、-xmodel=medium が必要になることがあります。

このオプションは累積的ではないため、コンパイラは、コマンド行にある -xmodel の右端のインスタンスに従ってモデル値を設定します。

-xmodel を指定しない場合、コンパイラは -xmodel=small と見なします。引数を指定せずに-xmodel を指定すると、エラーになります。

すべての変換単位をこのオプションでコンパイルする必要はありません。アクセスするオブジェクトが範囲内にあれば、選択したファイルをコンパイルできます。

すべての Linux システムが、ミディアムモデルをサポートしているわけではありません。

-xnolib

デフォルトのシステムライブラリとのリンクを無効にします。

通常 (このオプションを指定しない場合)、C++ コンパイラは、C++ プログラムをサポートするためにいくつかのシステムライブラリとリンクします。このオプションを指定すると、デフォルトのシステムサポートライブラリをリンクするための -llib オプションが ld に渡されません。

通常、コンパイラは、システムサポートライブラリにこの順序でリンクします。

デフォルトの -compat=5 モードの場合:

-lCstd -lCrun -lm -lc

Linux 上の -compat=g の場合、ライブラリは次のとおりです。

-lstdc++ -lCrunG3 -lm -lc

Oracle Solaris 上の -compat=g の場合、ライブラリは次のとおりです。

-lstdc++ -lgcc_s -lCrunG3 -lm -lc

-l オプションの順序は重要です。-lm オプションは、-lc の前に指定する必要があります。

注: -mt オプションが指定されている場合、コンパイラは通常、-lm でリンクする直前に -lthread でリンクします。

どのシステムサポートライブラリがデフォルトでリンクされるかを確認するには、-dryrun オプションでコンパイルします。たとえば、次のコマンドを実行するとします。

CC foo.cc -m64 -dryrun

次のものが含まれます

-lCstd -lCrun -lm -lc

例:

C アプリケーションのバイナリインタフェース (つまり、C サポートのみが必要な C++ プログラム) を満たす最小限のコンパイルを行うには、次のコマンドを使用します。

CC -xnolib test.cc -lc

libm を一般的な命令セットを含むシングルスレッドアプリケーションに静的にリンクするには、次のコマンドを使用します。

CC -xnolib test.cc -lCstd -lCrun -Bstatic

相互の関連性:

静的なシステムライブラリは、Oracle Solaris プラットフォームでは使用できません。

-xnolib を指定する場合は、必要なすべてのシステムサポートライブラリを特定の順序で手動でリンクする必要があります。システムサポートライブラリは最後にリンクしなければいけません。

-xnolib が指定されている場合、-library は無視されます。

警告:

多くの C++ 言語機能では、libCrun を使用する必要があります。

一連のシステムサポートライブラリは安定したものではなく、リリースごとに変更される可能性があります。

-xnolibmil

コマンド行の -xlibmil を取り消します。

最適化された数学ライブラリでのリンクをオーバーライドするには、このオプションを -fast とともに使用します。

-xnolibmopt

コマンド行の -xlibmopt を取り消します。

相互の関連性:

次に示すように、このオプションはコマンド行で -fast オプションを指定した場合は、そのあとに使用してください。

example% CC -fast -xnolibmopt ...
-xOn

最適化レベルを指定します (n)。(大文字 O の後ろに数字 1、2、3、4、または 5 を続けます。)

デフォルトでは最適化は行われません。ただし、これは最適化レベルを指定しない場合にかぎり有効です。最適化レベルを指定すると、最適化を無効にするオプションはありません。

最適化レベルを設定しないようにする場合は、最適化レベルを示すようなオプションを指定しないようにしてください。たとえば、-fast は最適化を -xO5 に設定するマクロオプションです。最適化レベルを暗黙に示すほかのすべてのオプションでは、最適化レベルが設定されているという警告メッセージが表示されます。最適化なしでコンパイルする唯一の方法は、コマンド行またはメイクファイルから最適化レベルを指定するすべてのオプションを削除することです。

一般に、プログラムのコンパイル時に使用される最適化のレベルが高いほど、実行時のパフォーマンスは向上します。ただし、最適化レベルを高くすると、コンパイル時間が長くなり、実行可能ファイルのサイズが大きくなります。

-xOn で使用できるレベルは 5 つあります。各レベルでコンパイラによって実行される実際の最適化は、各コンパイラのリリースによって異なる場合があります。ここでは要約のみを示しています。

オプティマイザがメモリーを使い切ると、レベルを下げて最適化をやり直します。以降のルーチンでは元のレベルに戻ってコンパイルを行います。

値:

-xO1

基本的でローカルな最適化のみを行います。

-xO2

基本的なローカルおよびグローバルな最適化を行います。通常、生成されるコードのサイズがもっとも小さくなります。

-xO3

関数レベルでグローバルな最適化を行います。通常、このレベルおよび -xO4 は、-xspace オプションとともに使用すると、最小のコードサイズになります。

-xO4

同じファイル内の関数の自動インライン化を追加します。通常、-xO4-xspace オプションと組み合わせないかぎり、コードが大きくなります。

インライン化されるルーチンの制御については、-inline を参照してください。

-xO5

もっとも高いレベルの最適化を行います。これを使用するのは、コンピュータのもっとも多くの時間を小さなプログラムが使用している場合だけにしてください。この最適化アルゴリズムは、コンパイルの所要時間が長く、また実行時間が確実に短縮される保証がありません。このレベルの最適化によってパフォーマンスが改善される確率を高くするには、プロファイルのフィードバックを使用します。-xprofile=collect|use を参照してください。

相互の関連性:

-g または -g0 を使用し、かつ最適化レベルが -xO3 以下である場合、コンパイラは、最大限のシンボリック情報をほぼ完全な最適化とともに提供します。末尾呼び出しの最適化とバックエンドのインライン化は無効です。

-g または -g0 を使用し、かつ最適化レベルが -xO4 以上である場合、コンパイラは、最大限のシンボリック情報を完全な最適化とともに提供します。

-g を指定したデバッグでは、-xOn が抑制されませんが、-xOn はいくつかの方法で -g を制限します。たとえば、最適化オプションは、デバッグのユーティリティーを減らすので dbx からの変数を表示できませんが、それでも dbx where コマンドを使用して、シンボリックトレースバックを取得することはできます。詳細は、『dbx コマンドによるデバッグ』を参照してください。

-xinline オプションは、-xO3 未満の最適化レベルには影響を与えません。-xO4 では、オプティマイザは -xinline オプションが指定されているかどうかには関係なく、どの関数をインライン化すべきかを判定します。-xO4 ではまた、コンパイラは、どの関数をインライン化すればパフォーマンスが向上するかの判定も試みます。-xinline で関数を強制的にインライン化した場合、実際にはパフォーマンスが低下する可能性があります。

警告:

1 つの手続きに数千行のコードが含まれた、非常に大きなプロシージャに対して -xO3 または -xO4 で最適化した場合、オプティマイザに妥当とは言えない量のメモリーが必要になる可能性があります。マシンのパフォーマンスが低下することがあります。

この低下が発生しないようにするには、limit コマンドを使用して、使用可能な仮想メモリーの量を 1 つのプロセスに制限します (csh(1) のマニュアルページを参照)。たとえば、仮想メモリーを 16M バイトに制限するには、次のコマンドを使用します。

example% limit datasize 16M

このコマンドにより、データ領域が 16M バイトに達すると、オプティマイザはメモリー不足を回復しようとします。

この制限値は、マシンの使用可能な合計スワップ領域を超えることはできず、また大規模なコンパイルが進行中でもマシンの通常の使用が可能なほどの小さい値にするようにしてください。

最良のデータサイズ設定値は、要求する最適化のレベルと実メモリーの量、仮想メモリーの量によって異なります。

実際のスワップ領域を確認するには、swap -1 と入力します。

実際の実メモリーを確認するには、dmesg | grep mem と入力します。

関連項目: -xldscope, -fast、-xprofile=p、 csh(1) のマニュアルページ

パフォーマンスアナライザでは、さまざまな最適化レベルがパフォーマンスアナライザのデータに与える影響について説明しています。

-xopenmp[={parallel|noopt|none}]

OpenMP 指令による明示的な並列化を有効にします。

-xopenmp の値を次に示します。

parallel

OpenMP プラグマの認識を有効にします。-xopenmp=parallel での最適化レベルは -xO3 です。コンパイラは必要に応じて最適化レベルを -xO3 に引き上げ、警告を発行します。

このフラグは、プリプロセッサマクロ _OPENMP も定義します。_OPENMP マクロは、10 進値 yyyymm が含まれるように定義します。ここで、yyyymm は、この実装がサポートする OpenMP API のバージョンの年と月を示します。特定のリリースの _OPENMP マクロの値については、『Oracle Solaris Studio OpenMP API ユーザーガイド』を参照してください。

noopt

OpenMP プラグマの認識を有効にします。最適化のレベルが -xO3 より低い場合でも、コンパイラは最適化のレベルを上げません。CC -xO2 -xopenmp=noopt のように -xO3 より低い最適化レベルを明示的に設定すると、エラーが表示されます。-xopenmp=noopt で最適化レベルを指定しなかった場合、OpenMP プラグマが認識され、その結果プログラムが並列化されますが、最適化は行われません。このフラグは、プリプロセッサマクロ _OPENMP も定義します。

none

OpenMP プラグマの認識を有効にせず、プログラムの最適化レベルへの変更は行わず、プリプロセッサマクロを定義しません。-xopenmp が指定されない場合は、これがデフォルトになります。

-xopenmp を指定するけれども値を指定しない場合、コンパイラは -xopenmp=parallel であると見なします。-xopenmp を一切指定しない場合、コンパイラは -xopenmp=none であると見なします。

dbx を指定して OpenMP プログラムをデバッグする場合、-g -xopenmp=noopt を指定してコンパイルすれば、並列化部分にブレークポイントを設定して変数の内容を表示できます。

-xopenmp のデフォルトは、将来のリリースで変更される可能性があります。警告メッセージを出力しないようにするには、適切な最適化レベルを明示的に指定します。

OpenMP プログラムを実行するときに使用するスレッドの数を指定するには、OMP_NUM_THREADS 環境変数を使用します。OMP_NUM_THREADS が設定されていない場合、並列領域の実行に使用されるスレッドのデフォルトの数は、マシンで利用できるコアの数になりますが、上限は 32 です。別のスレッド数を指定するには、OMP_NUM_THREADS 環境変数を設定するか、omp_set_num_threads() OpenMP 実行時ルーチンを呼び出すか、並列領域ディレクティブの num_threads 節を使用します。最高のパフォーマンスを得るため、並列領域の実行に使用するスレッドの数が、マシン上で使用できるハードウェアスレッド (仮想プロセッサ) の数を超えないようにしてください。Oracle Solaris システムでは、psrinfo(1M) コマンドを使用すると、この数を特定できます。Linux システムでは、ファイル /proc/cpuinfo を調べることでこの数を特定できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

入れ子並列は、デフォルトでは無効です。入れ子並列を有効にするには、OMP_NESTED 環境変数を TRUE に設定する必要があります。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

コンパイルとリンクを別々に実行する場合は、コンパイル手順とリンク手順の両方に -xopenmp を指定してください。リンク手順とともに使用した場合、-xopenmp オプションは、OpenMP 実行時サポートライブラリ libmtsk.so とリンクします。

最新の機能と最適なパフォーマンスを得るために、OpenMP 実行時ライブラリの最新のパッチ、libmtsk.so がシステムにインストールされていることを確認してください。

マルチスレッド対応アプリケーションを構築するための OpenMP Fortran 95、C および C++ アプリケーションプログラムインタフェース (API) の詳細は、『Oracle Solaris Studio OpenMP ユーザーガイド』を参照してください。

-xpagesize=n

スタックとヒープの優先ページサイズを設定します。

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

SPARC の場合: 4K8K64K512K2M4M32M256M2G16G、または default

x86/x64 の場合: 4K2M4M1G、または default

ターゲットプラットフォームに対して有効なページサイズを指定する必要があります。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

ページ内のバイト数を判断するには、pagesize(1) Oracle Solaris コマンドを使用します。オペレーティングシステムでは、ページサイズ要求に従うという保証はありません。ただし、適切なセグメントの整合を使用して、要求されたページサイズを取得できる可能性を高められます。セグメントの整合の設定方法は、-xsegment_align オプションを参照してください。ターゲットプラットフォームのページサイズを判断するには、pmap(1) または meminfo(2) を使用します。

-xpagesize オプションは、コンパイル時とリンク時に使用しないかぎり無効です。コンパイル時とリンク時の両方で指定する必要のあるコンパイラオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

-xpagesize=default を指定する場合は、Oracle Solaris オペレーティングシステムがページサイズを設定します。

このオプションは -xpagesize_heap -xpagesize_stack のマクロです。これらの 2 つのオプションは -xpagesize と同じ次の引数を使用します。両方に同じ値を設定するには -xpagesize=n を指定します。別々の値を指定するには個々に指定します。

このオプションを指定してコンパイルすることは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを実行する前に同等のオプションを指定して Oracle Solaris コマンド ppgsz(1) を実行することと同じ効果を持ちます。詳細は、Oracle Solaris の各マニュアルページを参照してください。

-xpagesize_heap=n

ヒープのメモリー内のページサイズを設定します。

n 値は、-xpagesize と同じです。

ターゲットプラットフォームに対して有効なページサイズを指定する必要があります。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

詳細は、-xpagesize を参照してください。

-xpagesize_stack=n

スタックのメモリー内のページサイズを設定します。

n 値は、-xpagesize と同じです。

ターゲットプラットフォームの Oracle Solaris オペレーティングシステムの有効なページサイズを指定する必要があります。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

詳細は、-xpagesize を参照してください。

-xpatchpadding[={fix|patch|size}]

各関数を開始する前に、メモリー領域を予約します。fix を指定した場合、コンパイラは fix で必要となる領域を予約して続行します。これはデフォルト値です。patch を指定した場合、または値を指定しない場合、コンパイラはプラットフォーム固有のデフォルト値で予約します。値 -xpatchpadding=0 は 0 バイトの領域を予約します。size の最大値は、x86 では 127 バイト、および SPARC では 2048 バイトです。

-xpch=v

このコンパイラオプションは、プリコンパイル済みヘッダー機能をアクティブにします。v には autoautofirstcollect:pch_filename、または use:pch_filename を指定できます。この機能を利用するには、-xpch-xpchstop オプションを、#pragma hdrstop 指令と組み合わせて使用できます。

-xpch オプションは、プリコンパイル済みヘッダーファイルを作成して、コンパイル時間を短縮するときに使用します。プリコンパイル済みヘッダーファイルは、大量のソースコードを含む一連の共通インクルードファイルセットをソースファイルが共有しているアプリケーションのコンパイル時間を短縮するように設計されています。プリコンパイル済みヘッダーを使用することによって、1 つのソースファイルから一連のヘッダーファイルに関する情報を収集し、そのソースファイルを再コンパイルする場合や、同じ一連のヘッダーを持つほかのソースファイルをコンパイルする場合に、その情報を使用することができます。

コンパイラを使用して、プリコンパイル済みヘッダーファイルを自動的に生成できます。これを行うための 2 つの方法のいずれかを選択します。1 つは、ソースファイルで検出された最初のインクルードファイルからプリコンパイル済みヘッダーファイルを作成する方法、もう 1 つの方法は、コンパイラが、ソースファイルで検出されたインクルードファイルのセット (最初のインクルードファイルから始めて、どのインクルードファイルが最後のものであるかを判断するためのよく定義されたポイントまで) から選択する方法です。プリコンパイル済みヘッダーを自動的に生成するためにコンパイラがどの方法を使用するかを決定するには、次の 2 つのフラグのいずれかを使用します。

-xpch=auto

プリコンパイル済みヘッダーファイルの内容は、コンパイラがソースファイル内で検出する使用可能な最長の接頭辞 (使用可能な接頭辞を識別する方法の説明については次のセクションを参照) に基づきます。このフラグは、最大限の数のヘッダーファイルで構成されるプリコンパイル済みヘッダーファイルを生成します。

-xpch=autofirst

このフラグは、ソースファイル内で最初に検出されたヘッダーのみからなるプリコンパイル済みヘッダーファイルを生成します。

プリコンパイル済みヘッダーファイルを手動で作成するには、最初に -xpch を使用し、collect モードを指定する必要があります。-xpch=collect を指定するコンパイルコマンドは、ソースファイルを 1 つしか指定できません。次の例では、-xpch オプションがソースファイル a.cc に基づいて header.Cpch というプリコンパイル済みヘッダーファイルを作成します。

CC -xpch=collect:myheader a.cc

有効なプリコンパイル済みヘッダーファイル名には、常に .Cpch という接尾辞が付きます。pch_filename を指定するときに、自分で接尾辞を追加することも、コンパイラで追加することもできます。たとえば、CC -xpch=collect:foo a.cc と指定すると、プリコンパイル済みヘッダーファイルには foo.Cpch という名前が付けられます。

コンパイラは、次の規則を使用して、既存のプリコンパイル済みヘッダーファイルを処理する方法を判断します。

コンパイラが既存のプリコンパイル済みヘッダーファイルを見つけたときに、そのファイルを使用するのは、ファイルの次の属性が現在のコンパイルから導き出された同じ情報に一致している場合だけです。

  • 活性文字列が一致します。

  • コマンド行オプションがまったく同じです。

  • 現在の作業ディレクトリが同じです。

  • ソースディレクトリのパス名が同じです。

  • コンパイラとプリコンパイラのヘッダーバージョン番号が一致します。

活性文字列が一致していると認められるには、次のことが当てはまる必要があります。

  • #include ファイル名がすべて同じです。

  • すべての #define および #undef ディレクティブは、同じシンボルを参照し、同じ順序で表示されます。

  • #define と関連する値は同一です。

  • 存在するすべてのプラグマは、元の順序で表示されます。

#ident/#pragma 識別子は「そのまま」活性文字列に渡され、等しいかどうかはチェックされないことに注意してください。この文字列引数は通常、ソースファイルごとに異なり、さらにチェックされた場合は既存のプリコンパイル済みヘッダーファイルの使用を抑制します。

一致の条件で使用されるコンパイラバージョンは、コンパイラの -V オプションによって返されるバージョンと同じです。

特定のプリコンパイル済みヘッダーを使用するようコンパイラに指示することもできます。これを行うには、-xpch=use:pch_filename を指定します。プリコンパイル済みヘッダーファイルを作成するために使用されたソースファイルと同じインクルードファイルの並びを持つソースファイルであれば、いくつでも指定できます。たとえば、use モードのコマンドは次のようになります。

CC -xpch=use:foo.Cpch foo.cc bar.cc foobar.cc

既存のプリコンパイル済みヘッダーファイルは、次の条件が当てはまる場合にのみ使用してください。次のいずれかが真でない場合は、プリコンパイル済みヘッダーファイルを再作成するべきです。

  • プリコンパイル済みヘッダーファイルにアクセスするために使用するコンパイラは、プリコンパイル済みヘッダーファイルを作成したコンパイラと同じであること。あるバージョンのコンパイラによって作成されたプリコンパイル済みヘッダーファイルは、別のバージョンのコンパイラでは使用できない場合があります。

  • -xpch オプション以外で -xpch=use とともに指定するコンパイラオプションは、プリコンパイル済みヘッダーファイルが作成されたときに指定されたオプションと一致すること。

  • -xpch=use で指定する一連のインクルードヘッダー群は、プリコンパイル済みヘッダーファイルが作成されたときに指定されたヘッダー群と同じであること。

  • -xpch=use で指定するインクルードヘッダーの内容が、プリコンパイル済みヘッダーファイルが作成されたときに指定されたインクルードヘッダーの内容と同じであること。

  • 現在のディレクトリ (すなわち、コンパイルが実行中で指定されたプリコンパイル済みヘッダーファイルを使用しようとしているディレクトリ) が、プリコンパイル済みヘッダーファイルが作成されたディレクトリと同じであること。

  • -xpch=collect で指定したファイル内の #include ディレクティブを含む前処理ディレクティブの初期シーケンスが、-xpch=use で指定するファイル内の前処理ディレクティブのシーケンスと同じであること。

プリコンパイル済みヘッダーファイルを複数のソースファイル間で共有するために、これらのソースファイルには、最初のトークンの並びとして一連の同じインクルードファイルを使用していなければいけません。トークンはキーワードか名前、句読点のいずれかです。コンパイラは、コードおよび、#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) のマニュアルページを参照してください。

-xpch=collect が指定されている場合、コンパイラはプリコンパイル済みヘッダーファイル用の依存関係情報を生成します。この依存関係情報を利用するには、Makefile 内に適切な規則を作成する必要があります。次の Makefile の例を考えてみてください。

%.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 の場合、Makefile に追加の make 規則を作成する必要はありません。

警告:

矛盾する -xpch フラグをコマンド行に指定しないでください。たとえば、-xpch=collect-xpch=auto の両方を指定したり、-xpchstop=<include> を付けて -xpch=autofirst を指定したりすると、エラーになります。

-xpch=autofirst を指定するか、-xpchstop なしで -xpch=auto を指定した場合、最初のインクルードファイル、あるいは -xpch=auto-xpchstop を付けて指定したインクルードファイルの前に宣言や定義、#line ディレクティブがあると、エラーになり、プリコンパイル済みヘッダーファイルの自動生成が無効になります。

-xpch=autofirst または -xpch=auto で、最初のインクルードファイルの前に #pragma hdrstop があると、プリコンパイル済みヘッダーファイルの自動生成が無効になります。

関連項目: -xpchstop

-xpchstop=file

file はプリコンパイル済みヘッダーファイルを作成する際に考慮される最後のインクルードファイルです。コマンド行で -xpchstop を使用することは、cc コマンドで指定する各ソースファイル内のファイルを参照する最初のインクルード指令のあとに、hdrstop プラグマを配置することと同じです。

<include> までのヘッダーファイルに基づくプリコンパイル済みヘッダーファイルを作成するには、-xpchstop=<include>-xpch=auto を組み合わせます。このフラグは、活性文字列全体に含まれているすべてのヘッダーファイルを使用するデフォルトの -xpch=auto の動作をオーバーライドします。

関連項目: -xpch

-xpec[={yes|no}]

(Oracle Solaris) 移植可能な実行可能コード (Portable Executable Code、PEC) バイナリを生成します。このオプションは、プログラム中間表現をオブジェクトファイルとバイナリに入れます。このバイナリは、あとでチューニングやトラブルシューティングのために、使用される場合があります。

-xpec を指定して構築したバイナリは通常、-xpec なしで構築したバイナリより 5 - 10 倍の大きさになります。

-xpec を指定しない場合は、コンパイラは -xpec=no に設定します。-xpec をフラグなしで指定した場合は、コンパイラは xpec を -xpec=yes に設定します。

-xpg

gprof プロファイラによるプロファイル処理用にコンパイルします。

-xpg オプションは、gprof でのプロファイリングのためのデータを収集する自己プロファイリングコードをコンパイルします。このオプションを指定すると、プログラムが正常に終了したときに gmon.out を生成する実行時記録メカニズムが呼び出されます。

注: -xpg を指定しても -xprofile には有益ではありません。これら 2 つは、他方で使用できるデータを生成せず、他方で生成されたデータを使用できません。

プロファイルは、64 ビットの Oracle Solaris プラットフォーム上では prof または gprof を使用して、また 32 ビットの Solaris プラットフォーム上では gprof のみを使用して生成され、概略のユーザー CPU 時間が含まれます。これらの時間は、メインの実行可能ファイルのルーチンと、実行可能ファイルをリンクするときにリンカー引数として指定した共有ライブラリのルーチンの PC サンプルデータ (pcsample(2) を参照) から導出されます。そのほかの共有ライブラリ (dlopen(3DL) を使用してプロセスの起動後に開かれたライブラリ) のプロファイルは作成されません。

32 ビット Oracle Solaris システムの場合、prof(1) を使用して生成されるプロファイルは、実行可能ファイル内のルーチンに制限されます。32 ビット共有ライブラリは、-xpg で実行可能ファイルをリンクし、gprof(1) を使用することでプロファイリングできます。

Solaris 10 ソフトウェアには、-p でコンパイルされたシステムライブラリは含まれていません。その結果、Solaris 10 プラットフォームで収集されたプロファイルには、システムライブラリルーチンの呼び出し回数が含まれません。

このタスクはまた、パフォーマンスアナライザでも実行できます。analyzer(1) のマニュアルページを参照してください。

警告:

コンパイル時に -xpg を指定した場合は、リンク時にも指定する必要があります。コンパイル時とリンク時の両方で指定する必要のあるオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

注: gprof プロファイリングのために -xpg でコンパイルされたバイナリは、binopt(1) では使用しないでください。互換性がないため、内部エラーになる可能性があります。

注: x86 システムでは、gprof ランタイムライブラリがプロファイルされるルーチンの戻りアドレスを判別するには、有効なフレームポインタが必要となるため、-xpg-xregs=frameptr と互換性がありません。x86 システムで -fast を指定してコンパイルすると、-xregs=frameptr が呼び出されます。代わりに、次のように指定してコンパイルします。

-fast -xregs=no%frameptr -xpg
-xport64[=v]

このオプションは、コードを 64 ビット環境に移植するのに役立ちます。特に、このオプションは、コードを 32 ビットアーキテクチャーから 64 ビットアーキテクチャーに移植する場合に一般的な、型 (ポインタを含む) の切り捨て、符号拡張、ビット配置の変更などの問題に対する警告を生成します。

このオプションは、-m64 を使用して 64 ビットモードでコンパイルしないかぎり効果はありません。(64 ビットの Linux システムでは、-m64 がデフォルトです)。

値:

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

no

コードの 32 ビット環境から 64 ビット環境への移植に関連した警告を生成しません。

implicit

暗黙の変換に関してのみ警告を生成する。明示的なキャストが存在する場合には警告を生成しない。

full

コードの 32 ビット環境から 64 ビット環境への移植に関連したすべての警告を生成します。これには、64 ビット値の切り捨て、ISO 値保護規則の下での 64 ビットへの符号拡張、およびビットフィールドの配置の変更に関する警告が含まれます。

デフォルト:

-xport64 を指定しない場合、デフォルトは -xport64=no です。-xport64 を指定したが、フラグを指定しない場合、デフォルトは -xport64=full です。

関連項目: -xarch-m32|-m64

-xprefetch[=a[,a]]

先読みをサポートするアーキテクチャーで先読み命令を有効にしたり、調整したりします。このオプションを使用する場合は、3 以上の最適化レベルでコンパイルする必要があります。

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

auto

先読み命令の自動生成を有効にします。

no%auto

自動生成を無効にします。

explicit

明示的な先読みマクロを有効にします。

明示的な先読みは、測定値によってサポートされた特殊な環境でのみ使用すべきです。

no%explicit

明示的な先読みマクロを無効にします。

latx:factor

(SPARC) このフラグは、-xprefetch=auto とのみ組み合わせることができます。指定の係数により、コンパイラの先読みからロード、および先読みからストアまでの応答時間を調整します。係数には必ず正の浮動小数点または整数を指定します。

yes

(廃止) 代わりに -xprefetch=auto,explicit を使用します。

no

(廃止) 代わりに -xprefetch=no%auto,no%explicit を使用します。

-xprefetch および -xprefetch=auto を指定すると、コンパイラは、生成するコードに先読み命令を自由に挿入できます。その結果、先読みをサポートするアーキテクチャーでパフォーマンスが向上します。

大規模なマルチプロセッサ上で計算量の多いコードを実行している場合は、-xprefetch=latx:factor を使用すると有利になることがあります。このオプションは、指定の係数により、先読みからロードまたはストアまでのデフォルトの応答時間を調整するようにコード生成プログラムに指示します。

先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。コンパイラは、先読み命令と先読みされたデータを使用するロードまたはストア命令の距離を決定する際に先読み応答時間の値を想定します。

注: 先読みからロードまでの想定待機時間が、先読みからストアまでの想定待機時間と同じではない可能性があります。

コンパイラは、幅広いマシンとアプリケーションで最適なパフォーマンスを得られるように先読みメカニズムを調整します。しかし、コンパイラの調整作業が必ずしも最適であるとはかぎりません。メモリーに負担のかかるアプリケーション、特に大型のマルチプロセッサでの実行を意図したアプリケーションの場合、先読みの応答時間の値を引き上げることにより、パフォーマンスを向上できます。この値を増やすには、1 よりも大きい係数を使用します。.5 と 2.0 の間の値は、おそらく最高のパフォーマンスを提供します。

データセットが全体的に外部キャッシュに常駐しているアプリケーションの場合、先読みの応答時間の値を引き下げることにより、パフォーマンスを向上できます。値を減らすには、1 未満の係数を使用します。

-xprefetch=latx: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 を使用する必要があります。

マクロを呼び出して sun_prefetch.h ヘッダーファイルをインクルードしても、-xprefetch=no%explicit を渡した場合は、実行可能ファイル内で明示的な先読みが実行されません。

-xchip 設定は、想定待機時間の決定、つまり latx:factor 設定の結果に影響を与えます。

latx:factor サブオプションは、自動先読みが有効になっている場合にのみ有効です。つまり、latx:factor は、yes または auto と組み合わせて使用されないかぎり無視されます。

警告:

コンパイラは広範囲なマシンやアプリケーションにわたって最適なパフォーマンスが得られるように先読みメカニズムを調整するため、latx:factor サブオプションは、パフォーマンステストによって明確な利点があることが示されている場合にのみ使用するようにしてください。使用先読み応答時間は、リリースごとに変わる可能性があります。したがって、別のリリースに切り替えたら、その都度応答時間係数の影響を再テストすることを推奨します。

-xprefetch_auto_type=[a]

a は [no%]indirect_array_access です。

このオプションは、コンパイラが -xprefetch_level オプションで示されたループのための間接先読みを、直接メモリーアクセスのための先読みが生成されるのと同じ方法で生成するかどうかを決定するために使用します。

接頭辞 no% は、このオプションを無効にします。

-xprefetch_auto_type の値が指定されていない場合、-xprefetch_auto_type=no%indirect_array_access に設定されます。

-xalias_level などのオプションは、メモリー別名を明確化する情報の生成に役立つため、間接プリフェッチ候補の計算の積極性に影響し、このため、自動的な間接プリフェッチの挿入が促進されることがあります。

-xprefetch_level=l

-xprefetch=auto によって決定される先読み命令の自動挿入を制御します。デフォルトは、-xprefetch=auto を指定した場合は -xprefetch_level=1 になります。

l は 1、2、または 3 である必要があります。

先読みレベル 2 および 3 は、旧バージョンの SPARC および x86 プラットフォームでは無効な場合があります。

-xprefetch_level=1 は、先読み命令の自動生成を有効にします。-xprefetch_level=2 はレベル 1 を対象にしたループを上回る追加のループを対象にし、-xprefetch=3 はレベル 2 を対象にしたループを上回る追加のループを対象にします。

最適化レベル 3 以上でコンパイルして、先読みをサポートするプラットフォーム用のコードを生成する必要があります。

-xprevise={yes|no}

コードアナライザを使用して表示できるソースコードの静的分析を生成する場合は、このオプションを指定してコンパイルします。

-xprevise=yes でコンパイルし、別の手順でリンクする場合、リンク手順でも -xprevise=yes をインクルードします。

デフォルトは -xprevise=no です。

Linux では、-xprevise=yes-xannotate とともに指定する必要があります。

詳細は、Oracle Solaris Studio コードアナライザのドキュメントを参照してください。

-xprofile=p

プロファイルのデータを収集、または最適化のためにプロファイルを使用します。

p には、collect[:profdir]、use[:profdir]、または tcov[:profdir] を指定する必要があります。

このオプションを指定すると、実行頻度のデータが収集されて実行中に保存されます。このデータを以降の実行で使用すると、パフォーマンスを向上させることができます。プロファイルの収集は、マルチスレッド対応のアプリケーションにとって安全です。すなわち、独自のマルチタスク (-mt) を実行するプログラムをプロファイリングすることで、正確な結果が得られます。このオプションは、最適化レベルを -xO2 かそれ以上に指定するときにのみ有効になります。

コンパイルとリンクを別々の手順で実行する場合は、コンパイル手順とリンク手順の両方で同じ -xprofile オプションを指定する必要があります。コンパイル時とリンク時の両方で指定する必要のあるオプションの完全なリストについては、『C++ ユーザーズガイド』を参照してください。

collect[:profdir]

実行頻度のデータを集めて保存します。のちに -xprofile=use を指定した場合にオプティマイザがこれを使用します。コンパイラによって文の実行頻度を測定するためのコードが生成されます。

-xMerge-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

プロファイルディレクトリ名として profdir を指定すると、この名前が、プロファイル化されたオブジェクトコードを含むプログラムまたは共有ライブラリの実行時にプロファイルデータが保存されるディレクトリのパス名になります。パス名が絶対パスではない場合、プログラムがオプション -xprofile=use:profdir でコンパイルされるときの現在の作業用ディレクトリの相対パスと見なされます。

-xprofile=collect:prof_dir または -xprofile=tcov:prof_dir でプロファイルディレクトリ名を指定しない場合、プロファイルデータは実行時に、program.profile という名前のディレクトリに保存されます (program はプロファイリングされたプロセスのメインプログラムのベース名)。この場合は、環境変数SUN_PROFDATAおよびSUN_PROFDATA_DIRを使用して、実行時にプロファイルデータが保存される場所を制御できます。設定した場合、プロファイルデータは $SUN_PROFDATA_DIR/$SUN_PROFDATA で指定されたディレクトリに書き込まれます。

プロファイルディレクトリ名がコンパイル時に指定されても、実行時に SUN_PROFDATA_DIR および SUN_PROFDATA の効果はありません。これらの環境変数は、tcov で書き込まれるプロファイルデータファイルのパスと名前を同様に制御します。tcov(1) のマニュアルページを参照してください。

これらの環境変数が設定されていない場合、プロファイルデータは現在のディレクトリ内のディレクトリ profdir.profile に書き込まれます (profdir は実行可能ファイルの名前または -xprofile=collect:profdir フラグで指定される名前)。profdir がすでに .profile で終わっている場合、-xprofile は .profile を profdir に追加しません。プログラムを複数回実行すると、実行頻度データは profdir.profile ディレクトリに蓄積されていくので、以前の実行頻度データは失われません。

Example[1]: プログラムが構築されたディレクトリと同じディレクトリ内にある myprof.profile ディレクトリ内のプロファイルデータを収集して使用するには、次の手順に従います。

 
CC -xprofile=collect:myprof.profile -xO5 prog.cc -o prog
  ./prog
CC -xprofile=use:myprof.profile -xO5 prog.cc -o prog

Example[2]: /bench/myprof.profile ディレクトリ内のプロファイルデータを収集し、収集したプロファイルデータをあとでフィードバックコンパイルで最適化レベル -xO5 で使用するには、次の手順に従います。

 
CC -xprofile=collect:/bench/myprof.profile -xO5 prog.cc -o prog
  ...run prog from multiple locations...
CC -xprofile=use:/bench/myprof.profile -xO5 prog.cc -o prog

別々の手順でコンパイルしてリンクする場合は、-xprofile=collect を指定してコンパイルしたオブジェクトファイルは、リンクでも必ず -xprofile=collect を指定してください。『C ユーザーガイド』に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの完全な一覧が記載されています。

非同期のプロファイル収集を制御する環境変数の説明については、このマニュアルページの「環境変数」のセクションも参照してください。

use[:profdir]

-xprofile=collect[:profdir] または -xprofile=tcov[:profdir] でコンパイルされたコードから収集された実行頻度データを使用して、プロファイル化されたコードが実行されたときに実行された作業用に最適化します。profdir は、-xprofile=collect[:profdir] または -xprofile=tcov[:profdir] でコンパイルされたプログラムを実行して収集されたプロファイルデータを含むディレクトリのパス名です。

tcov と -xprofile=use[:profdir] の両方で使用できるデータを生成するには、-xprofile=tcov[:profdir] オプションを使用して、コンパイル時に同じプロファイルディレクトリを指定する必要があります。混乱を最小限に抑えるには、profdir を絶対パス名として指定します。

profdir はオプションです。profdir が指定されていない場合、実行可能バイナリの名前が使用されます。-o が指定されていない場合、a.out が使用されます。profdir が指定されていない場合、コンパイラは、profdir.profile/feedback、または a.out.profile/feedback を探します。例:

CC -xprofile=collect -o myexe prog.c
CC -xprofile=use:myexe -xO5 -o myexe prog.c

-xprofile=collect オプションを付けてコンパイルしたときに生成され、プログラムの前の実行で作成されたフィードバックファイルに保存された実行頻度データを使用して、プログラムが最適化されます。

-xprofile オプションを除き、ソースファイルおよびコンパイラのほかのオプションは、フィードバックファイルを生成したコンパイル済みプログラムのコンパイルに使用したものと完全に同一のものを指定する必要があります。同じバージョンのコンパイラは、収集構築と使用構築の両方に使用する必要があります。

-xprofile=collect:profdir を付けてコンパイルした場合は、-xprofile=use: profdir のコンパイルの最適化に同じプロファイルディレクトリ名 profdir を使用する必要があります。

収集 (collect) 段階と使用 (use) 段階の間のコンパイル速度を高める方法については、-xprofile_ircache も参照してください。

tcov[:profdir]

tcov(1) を使用する基本のブロックカバレッジ分析用の命令オブジェクトファイル。

オプションの :profdir 引数を指定した場合、コンパイラは指定された場所にプロファイルディレクトリを作成します。プロファイルディレクトリに格納したデータは、tcov(1)、または -xprofile=use:profdir を指定したコンパイラで使用できます。

オプションの :profdir 引数を省略すると、プロファイル化されたプログラムの実行時にプロファイルディレクトリが作成されます。プロファイルディレクトリに保存されたデータは、tcov(1) でのみ使用できます。プロファイルディレクトリの場所は、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を使用して指定できます。以下の「環境変数」を参照してください。

:profdir で指定されている場所が絶対パス名でない場合、その場所は、プログラムがコンパイルされるときの現在の作業ディレクトリを基準にして解釈されます。

いずれかのオブジェクトファイルに対して :profdir が指定されている場合は、同じプログラム内のすべてのオブジェクトファイルに対して同じ場所を指定する必要があります。場所が :profdir で指定されているディレクトリには、プロファイル化されたプログラムを実行するときにすべてのマシンからアクセスできる必要があります。プロファイルディレクトリはその内容が必要なくなるまで削除できません。コンパイラでプロファイルディレクトリに保存されたデータは、再コンパイルする以外復元できません。

例 1: 1 つ以上のプログラムのオブジェクトファイルが -xprofile=tcov:/test/profdata でコンパイルされる場合、/test/profdata.profile という名前のディレクトリがコンパイラによって作成されて、プロファイル化されたオブジェクトファイルを表すデータの保存に使用されます。実行時に同じディレクトリを使用して、プロファイル化されたオブジェクトファイルに関連付けられた実行データを保存できます。

例 2: 「myprog」という名前のプログラムが -xprofile=tcov でコンパイルされ、ディレクトリ /home/joe で実行されると、実行時にディレクトリ /home/joe/myprog.profile が作成されて、実行時プロファイルデータの保存に使用されます。

-xprofile_ircache[=path]

収集フェーズから保存されたコンパイルデータを再利用することによって使用フェーズ中のコンパイル時間を改善するには、-xprofile_ircache[=path] を -xprofile=collect|use とともに使用します。

大きなプログラムでは、中間データが保存されるため、use段階のコンパイル時間の効率を大幅に向上させることができます。保存されたデータが必要なディスク容量を相当増やすことがある点に注意してください。

-xprofile_ircache[=path] を使用すると、path はキャッシュファイルが保存されているディレクトリをオーバーライドします。デフォルトでは、これらのファイルはオブジェクトファイルと同じディレクトリに保存されます。collect と use 段階が 2 つの別のディレクトリで実行される場合は、パスを指定しておくと便利です。

次は一般的なコマンドシーケンスを示します。

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=use コマンドも指定している場合は、-xprofile_pathmap オプションを使用します。次の項目がともに真で、コンパイラが -xprofile=use でコンパイルされたオブジェクトファイルのプロファイルデータを見つけられない場合は、-xprofile_pathmap を使用します。

  • 前回オブジェクトファイルが -xprofile=collect でコンパイルされたディレクトリとは異なるディレクトリで、オブジェクトファイルを -xprofile=use を指定してコンパイルしている。

  • オブジェクトファイルはプロファイルで共通ベース名を共有しているが、異なるディレクトリのそれぞれの位置で相互に識別されている。

collect-prefix は、オブジェクトファイルが -xprofile=collect でコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

use-prefix は、オブジェクトファイルが -xprofile=use を指定してコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

-xprofile_pathmap の複数のインスタンスを指定すると、コンパイラは指定した順序でインスタンスを処理します。-xprofile_pathmap のインスタンスで指定された各 use-prefix は、一致する use-prefix が識別されるか、最後に指定された use-prefix がオブジェクトファイルのパス名と一致しないことが確認されるまで、オブジェクトファイルのパス名と比較されます。

-xreduction

自動的な並列化を実行するときにループの縮約を解析します。このオプションは、-xautopar が指定する場合のみ有効です。それ以外の場合は、コンパイラは警告を発行します。

縮約の認識が有効になっている場合、コンパイラは内積、最大値発見、最小値発見などの縮約を並列化します。これらの縮約によって非並列化コードによる四捨五入の結果と異なります。

-xregs=r[,r...]

生成されたコードのレジスタの使用法を指定します。

r には、applfloat、frameptr サブオプションのいずれか 1 つ以上をコンマで区切って指定します。

サブオプションの前に no% を付けるとそのサブオプションは無効になります。

例: -xregs=appl,no%float

-xregs サブオプションは、特定のハードウェアプラットフォームでしか使用できません。

appl (SPARC)

コンパイラがアプリケーションレジスタをスクラッチレジスタとして使用してコードを生成することを許可します。アプリケーションレジスタは次のとおりです。

  • g2、g3、g4 ( 32 ビットプラットフォーム)

  • g2、g3 (64 ビットプラットフォーム)

すべてのシステムソフトウェアおよびライブラリは、-xregs=no%appl を指定してコンパイルすることをお勧めします。システムソフトウェア (共有ライブラリを含む) は、アプリケーション用のレジスタの値を保持する必要があります。これらの値は、コンパイルシステムによって制御されるもので、アプリケーション全体で整合性が確保されている必要があります。

SPARC ABI では、これらのレジスタはアプリケーションレジスタと記述されています。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。

SPARC 命令セットの詳細は、-xarch を参照してください。

float (SPARC)

コンパイラが浮動小数点レジスタを整数値用のスクラッチレジスタとして使用してコードを生成することを許可します。浮動小数点値は、このオプションに関係なくこれらのレジスタを使用する場合があります。浮動小数点レジスタに対するすべての参照を排除したバイナリコードを生成するには、-xregs=no%float を使用するとともに、決して浮動小数点型をソースコードで使わないようにします。

float (x86)

コンパイラが浮動小数点レジスタをスクラッチレジスタとして使用してコードを生成することを許可します。浮動小数点値は、このオプションに関係なくこれらのレジスタを使用する場合があります。浮動小数点レジスタに対するすべての参照を排除したバイナリコードを生成するには、-xregs=no%float を使用するとともに、決して浮動小数点型をソースコードで使わないようにします。コードの生成時に、コンパイラは浮動小数点、simd、または x87 の命令を使用した結果のコードを診断しようとします。

frameptr (x86)

フレームポインタレジスタ (IA32 の場合 %ebp、x86 の 64 ビットプラットフォームの場合 %rbp) をコンパイラが汎用レジスタとして使用することを許可します。

デフォルトは -xregs=no%frameptr です。

-features=no%except によって例外も無効になっている場合を除いて、C++ コンパイラは -xregs=frameptr を無視します。-xregs=frameptr-fast の一部ですが、-features=no%except も同時に指定されないかぎり C++ コンパイラによって無視されます。

-xregs=frameptr を使用すると、コンパイラは浮動小数点レジスタを自由に使用できるので、プログラムのパフォーマンスが向上します。ただし、デバッガおよびパフォーマンス測定ツールの一部の機能が制限される場合があります。スタックトレース、デバッガ、およびパフォーマンスアナライザは、—xregs=frameptr を使用してコンパイルされた機能についてレポートできません。

また、Posix pthread_cancel() への C++ の呼び出しは、クリーンアップハンドラを見つけようとして失敗します。

C、Fortran、C++ が混在しているコードで、C または Fortran 関数から直接または間接的に呼び出された C++ 関数が例外をスローする可能性がある場合、このコードは -xregs=frameptr でコンパイルしないようにしてください。このような言語が混在するソースコードを -fast でコンパイルする場合は、コマンド行の -fast オプションのあとに -xregs=no%frameptr を追加します。

64 ビットのプラットフォームでは利用できるレジスタが多いため、—xregs=frameptr でコンパイルすると、64 ビットコードよりも 32 ビットコードのパフォーマンスが向上する可能性が高くなります。

注: -xpg も指定した場合は、コンパイラは -xregs=frameptr を無視して警告を発行します。また、-xkeepframe-xregs=frameptr をオーバーライドします。

SPARC のデフォルトは -xregs=appl,float です。x86 のデフォルトは -xregs=no%frameptr,float です。x86 での -fast の展開では -xregs=frameptr が含められます。

アプリケーションにリンクする共有ライブラリ用のコードは、-xregs=no%appl,float を指定してコンパイルすることをお勧めします。少なくとも、共有ライブラリとリンクするアプリケーションがこれらのレジスタの割り当てを認識するように、共有ライブラリがアプリケーションレジスタを使用する方法を明示的に示す必要があります。

たとえば、大局的な方法で (重要なデータ構造体を示すためにレジスタを使用するなど) レジスタを使用するアプリケーションは、ライブラリと確実にリンクするため、-xregs=no%appl なしでコンパイルされたコードを含むライブラリがアプリケーションレジスタをどのように使用するかを正確に特定する必要があります。

-xrestrict[=f]

ポインタ値の関数パラメータを制限付きポインタとして扱います。f は、%all%none%source、または 1 つ以上の関数名のコンマ区切りリストです。このコマンド行オプションは独立して使用できますが、-xO3 以上の最適化時に使用するのがもっとも適しています。

-xrestrict=%source を指定した場合は、いずれかのヘッダーファイルまたはテンプレート定義ファイルではなく、メインのソースファイルで定義されているすべての関数が制限されることを示します。

このオプションで関数リストを指定した場合は、指定された関数内のポインタパラメータが制限付きとして扱われます。-xrestrict=%all を指定した場合は、C++ ファイル全体のすべてのポインタパラメータが制限付きとして扱われます。

デフォルトは %none です。-xrestrict の指定は、-xrestrict=%source の指定と同等です。

関連項目: -xprefetch_auto_type、『C++ ユーザーズガイド』の「制限付きポインタ」

-xs[={yes|no}]

(Oracle Solaris) オブジェクトファイルからのデバッグ情報を実行可能ファイルにリンクします。

-xs-xs=yes と同じです。-xdebugformat=dwarf のデフォルトは -xs=yes と同じです。-xdebugformat=stabs のデフォルトは -xs=no と同じです。

このオプションは、実行可能ファイルのサイズ、およびデバッグのためにオブジェクトファイルを保持する必要性のトレードオフを制御します。dwarf の場合は、-xs=no を使用して実行可能ファイルを小さくしますが、オブジェクトファイルに依存しています。stabs の場合は、-xs または -xs=yes を使用してオブジェクトファイルに依存しないようにしますが、実行可能ファイルが大きくなります。このオプションは、dbx のパフォーマンスやプログラムの実行時パフォーマンスにはほとんど影響しません。

コンパイルコマンドがリンクを強制した (つまり、-c を指定しない) 場合、オブジェクトファイルはなく、デバッグ情報を実行可能ファイルに含める必要があります。この場合、-xs=no (暗黙的または明示的) は無視されます。

この機能は、コンパイラが生成されるオブジェクトファイル内のセクションフラグおよびセクション名を調整し、リンカーにそのオブジェクトファイルのデバッグ情報に関する処理を指示することによって実装されます。このため、これはコンパイラオプションであり、リンカーオプションではありません。一部のオブジェクトファイルが -xs=yes でコンパイルされ、ほかのオブジェクトファイルが -xs=no でコンパイルされた実行可能ファイルを作成することが可能です。

Linux コンパイラは -xs を受け入れますが無視します。Linux コンパイラは -xs={yes|no} を受け入れません。

-xsafe=mem

(SPARC)コンパイラは、メモリー保護の違反が発生していないことを想定できます。

このオプションを使用すると、コンパイラでは SPARC V6 アーキテクチャーで違反のないロード命令を使用できます。

警告:

アドレスの位置合わせが合わない、またはセグメンテーション侵害などの違反が発生した場合は違反のないロードはトラップを引き起こさないので、このオプションはこのような違反が起こる可能性のないプログラムでしか使用しないでください。ほとんどのプログラムではメモリーに関するトラップは起こらないので、大多数のプログラムでこのオプションを安全に使用できます。例外条件の処理にメモリーベースのトラップを明示的に使用するプログラムでは、このオプションは使用しないでください。

相互の関連性:

このオプションは、最適化レベルの -xO5 と、次のいずれかの値の -xarch を組み合わせた場合にだけ有効です。-m32-m64 の両方で sparcsparcvissparcvis2、または sparcvis3

-xsegment_align=n

(Oracle Solaris) このオプションを指定すると、ドライバはリンク行で特殊なマップファイルをインクルードします。マップファイルはテキスト、データ、および bss セグメントを、n で指定された値に整列します。非常に大きなページを使用する場合は、ヒープセグメントおよびスタックセグメントが適切な境界に整列されることが重要です。これらのセグメントが整列されない場合、次の境界まで小さなページが使用され、この結果、パフォーマンスが低下することがあります。マップファイルにより、セグメントは確実に適切な境界上に整列されます。

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

SPARC: 有効な値は、8K64K512K2M4M32M256M1G、および none です。

x86: 有効な値は、4K8K64K512K2M4M32M256M1G、および none です。

SPARC と x86 のデフォルトはどちらも none です。

推奨の使用法は次のとおりです。

SPARC 32-bit compilation: -xsegment_align=64K
SPARC 64-bit compilation: -xsegment_align=4M

x86 32-bit compilation: -xsegment_align=8K
x86 64-bit compilation: -xsegment_align=4M

ドライバは適切なマップファイルをインクルードします。たとえば、ユーザーが -xsegment_align=4M と指定した場合、ドライバは -Minstall-directory/lib/compilers/mapfiles/map.4M.align をリンク行に追加します。install-directory はインストールディレクトリです。前述のセグメントは、4M 境界上に整列されます。

-xspace

コードサイズを増加させる最適化を許可しません。

-xtarget=t

命令セットと最適化の対象とするシステムを指定します。

t は、nativenative64genericgeneric64system-name のいずれかである必要があります。

このオプションはマクロです。-xtarget の特定の各値は、-xarch-xchip、および -xcache オプションの特定の一連の値に展開されます。-xtarget などのマクロオプションの展開を確認する方法の詳細は、-dryrun の説明を参照してください。

注: 特定のホストプラットフォームで -xtarget を展開した場合、そのプラットフォームでコンパイルすると -xtarget=native と同じ -xarch-xchip、または -xcache 設定にならない場合があります。

-xtarget=native は、-m32-xarch=native-xchip=native-xcache=native と同等であり、32 ビットホストシステム上での最高のパフォーマンスを提供します。

-xtarget=native64 は、-m64-xarch=native64-xchip=native64-xcache=native と同等であり、64 ビットホストシステム上での最高のパフォーマンスを提供します。

-xtarget=generic は、-m32-xarch=generic-xchip=generic-xcache=generic と同等であり、ほとんどの 32 ビットシステム上での汎用的なアーキテクチャー、チップ、およびキャッシュのための最高のパフォーマンスを提供します。

-xtarget=generic64 は、-m64-xarch=generic64-xchip=generic64-xcache=generic と同等であり、ほとんどの 64 ビットシステム上での汎用的なアーキテクチャー、チップ、およびキャッシュのための最高のパフォーマンスを提供します。

SPARC プラットフォームの場合:

64 ビット SPARC アーキテクチャー上での 64 ビット Oracle Solaris ソフトウェアのコンパイルは、-m64 オプションで示されます。native64 または generic64 以外のフラグで -xtarget を指定する場合は、-m64 オプションも次のように指定する必要があります。

-xtarget=ultra4 ... -m64

そうでない場合は、コンパイラは 32 ビットメモリーモデルを使用します。

platform-name

指定するシステムで最高のパフォーマンスが得られます。platform name の有効な SPARC 値は、ultraultra2ultra2iultra1/140ultra1/170ultra1/200ultra2/1170ultra2/1200ultra2/1300ultra2/2170ultra2/2200ultra2/2300ultra2eultra2iultra3ultra3cuultra3iultra4ultra4plusultraT1ultraT2ultraT2plusT3T4T5M5sparc64visparc64viisparc64viiplussparc64xsparc64xplus です。

注: 次の SPARC プラットフォーム名は廃止されており、将来のリリースで削除される可能性があります。ultraultra2ultra2eultra2iultra3ultra3cuultra3iultra4、および ultra4plus

x86 プラットフォームの場合:

64 ビット x86 プラットフォーム上での 64 ビット Oracle Solaris ソフトウェアのコンパイルは、-m64 オプションで示されます。native64 または generic64 以外のフラグで -xtarget を指定する場合は、-m64 オプションも次のように指定する必要があります。

-xtarget=opteron ... -m64

そうでない場合は、コンパイラは 32 ビットメモリーモデルを使用します。

processor_name

次の x86 プロセッサ上での最高のパフォーマンスを得るためのコードを生成します。nehalembarcelonaopteronpentiumpentium_propentium3pentium4penrynsandybridgeivybridgehaswellwestmerewoodcrest

プラットフォームとプロセッサの名前の詳細は、『C++ ユーザーズガイド』を参照してください。

-xtarget サブオプションの実際の展開は、各コンパイラリリースで変更および改善されることがあります。実際の展開を確認するには、次のように -dryrun でコンパイルします。

 
CC -dryrun -xtarget=ultra4 |& grep ###
###     command line files and options (expanded):
### -dryrun -xchip=ultra4 -xcache=64/32/4:8192/128/2 -xarch=sparcvis2
-xtemp=path

-temp=path と同等です。

-xthreadvar[=o]

__thread 宣言指定子とともに動作し、コンパイラのスレッドローカルなストレージ機能を活用します。__thread 指定子を使用してスレッド変数を宣言したあとは、-xthreadvar を使用することにより、動的 (共有) ライブラリ内の位置依存コード (PIC 以外のコード) でスレッドローカルなストレージを使用できるようにします。__thread の使用方法の詳細は、『C++ ユーザーズガイド』を参照してください。

値:

o には、次のいずれかを指定できます。

[no%]dynamic

動的ロード用の変数をコンパイルします。接頭辞 no% はこのオプションを無効にします。-xthreadvar=no%dynamic を指定すると、スレッド変数へのアクセスは非常に早くなりますが、動的ライブラリ内のオブジェクトファイルは使用できません。すなわち、実行可能ファイル内のオブジェクトファイルだけが使用可能です。

デフォルト:

-xthreadvar を指定しない場合、コンパイラが使用するデフォルトは位置独立コード (PIC) が有効になっているかどうかによって決まります。位置独立コードが有効になっている場合、オプションは -xthreadvar=dynamic に設定されます。位置独立コードが無効になっている場合、オプションは -xthreadvar=no%dynamic に設定されます。

引数を指定しないで -xthreadvar を指定する場合、オプションは -xthreadvar=dynamic に設定されます。

相互の関連性:

__thread を使用するオブジェクトは、-mt でコンパイルおよびリンクする必要があります。

警告:

位置独立ではないコードが動的ライブラリに含まれる場合、-xthreadvar を指定する必要があります。

リンカーは、動的ライブラリ内の位置依存コード (非 PIC) スレッド変数と同等のスレッド変数はサポートできません。非 PIC スレッド変数は非常に高速なため、実行可能ファイルのデフォルトとして指定できます。

関連項目: -xcode-KPIC-Kpic

-xthroughput[={yes|no}]

-xthroughput オプションは、システム上で多数のプロセスが同時に実行されている状況でアプリケーションが実行されることをコンパイラに示します。

-xthroughput=yes を指定すると、コンパイラは、単一のプロセスのパフォーマンスは若干低下するが、システム上のすべてのプロセスによって実行される作業量が増加するように最適化を行います。たとえば、コンパイラがデータの先読みの積極性を下げることを選択する可能性があります。そのように選択すると、そのプロセスによって消費されるメモリー帯域幅が減少し、プロセスの実行が遅くなることがありますが、ほかのプロセスが共有するメモリー帯域幅が増加します。

デフォルトは -xthroughput=no です。

-xtime

CC ドライバが各種のコンパイルパスでの実行時間を報告するようにします。

-xtrigraphs[={yes|no}]

ISO/ANSI C 標準で定義されている 3 文字表記シーケンスの認識を有効または無効にします。

-xtrigraphs=yes は、ソースコード内の 3 文字表記の認識を有効にします。

-xtrigraphs=no は、ソースコード内の 3 文字表記の認識を無効にします。

デフォルト:

-xtrigraphs オプションが指定されていない場合は、-xtrigraphs=yes であると見なされます。

-xtrigraphs だけを指定すると、-xtrigraphs=yes が想定されます。

-xunboundsym={yes|no}

動的に結合されているシンボルへの参照がプログラムに含まれているかどうかを指定します。

-xunboundsym=yes は、動的に結合されたシンボルへの参照がプログラムに含まれていることを意味します。

-xunboundsym=no は、動的に結合されているシンボルへの参照がプログラムに含まれていないことを意味します。

デフォルトは -xunboundsym=no です。

-xunroll=n

可能な場合は、ループを展開します。

このオプションは、コンパイラがループを最適化 (展開) するかどうかを指定します。

n が 1 である場合は、コンパイラにループを展開しないよう提案します。

n が 1 より大きい整数であるときに -xunroll=n を指定すると、コンパイラはループを n 回展開します。

-xustr={ascii_utf16_ushort|no}

このオプションは、コンパイラでの UTF-16 の文字列やリテラルの認識を有効にします。このような文字列やリテラルはまだどの標準にも含まれていないため、このオプションは非標準 C++ の認識を有効にします。ISO10646 UTF-16 文字を使用する国際化アプリケーションをサポートする必要がある場合は、-xustr=ascii_utf16_ushort を指定します。つまり、このオプションは、コードにコンパイラでオブジェクトファイル内の UTF-16 文字に変換するようにしたい文字列文字が含まれている場合に使用します。このオプションを指定しない場合、コンパイラは 16 ビット文字の生成も認識も行いません。このオプションは、U"ASCII_string" 文字列リテラルを unsigned short int 型の配列として認識できるようにします。このオプションはまた、文字リテラルの認識も有効にします。例: unsigned short character = U'Z';

-xustr=no を指定すると、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 foo; }
example% CC -xustr=ascii_utf16_ushort file.cc -c

8 ビットの文字リテラルの前に U を付加することにより、unsigned short 型の 16 ビットの UTF-16 文字を形成できます。例:

 
const unsigned short x = U'x';
const unsigned short y = U'\x79';
-xvector[=a]

ベクトルライブラリの呼び出しの自動生成、または SIMD (Single Instruction Multiple Data) をサポートする x86 プロセッサ上での SIMD 命令の生成、あるいはその両方を有効にします。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

-xvector オプションには、-O3 以上の最適化レベルが必要です。最適化レベルが指定されていないか、または -O3 より低い場合、コンパイルは続行されず、メッセージが発行されます。

a には、次の値を指定できます (接頭辞 no% はサブオプションを無効にします)。

[no%]lib

(Oracle Solaris) コンパイラは可能な場合はループ内の数学ライブラリへの呼び出しを、同等のベクトル数学ルーチンへの単一の呼び出しに変換します。大きなループカウントを持つループでは、これによりパフォーマンスが向上します。このオプションを無効にするには no%lib を使用します。

[no%]simd

(SPARC) -xarch=sparcace-xarch=sparcaceplus の場合、特定のループのパフォーマンスを改善するために、浮動小数点および整数の SIMD 命令を使用するようにコンパイラに指示します。ほかの SPARC プラットフォームの場合とは反対に、-xvector=simd は、-xvector=none および -xvector=no%simd を除き、任意の -xvector オプションを指定した -xarch=sparcace および -xarch=sparcaceplus のもとで常に有効です。さらに、-xvector=simd には 3 よりも大きい -O が必要であり、それ以外の場合はスキップされ、警告は発行されません。

ほかのすべての -xarch 値の場合、特定のループのパフォーマンスを改善するために Visual Instruction Set [VIS1、VIS2、ViS3 など] SIMD 命令を使用するようにコンパイラに指示します。基本的に -xvector=simd オプションを明示的に使用すると、コンパイラは、ループ繰り返し数を減らすためにループ変換を実行して、特殊なベクトル化した SIMD 命令の生成を有効にします。-xvector=simd オプションは、-O が 3 より大きく -xarchsparcvis3 以上である場合にのみ有効です。それ以外の場合、-xvector=simd はスキップされ、警告は発行されません。

[no%]simd

(x86) コンパイラにネイティブ x86 SSE SIMD 命令を使用して特定のループのパフォーマンスを向上させるよう指示します。ストリーミング拡張機能は、x86 で最適化レベルが 3 かそれ以上に設定されている場合にデフォルトで使用されます。このオプションを無効にするには、no%simd を使用します。

コンパイラは、ストリーミング拡張機能がターゲットのアーキテクチャーに存在する場合、つまりターゲットの ISA が SSE2 以上である場合にのみ SIMD を使用します。たとえば、最新のプラットフォームで -xtarget=woodcrest、-xarch=generic64、-xarch=sse2、-xarch=sse3、または -fast を指定して使用できます。ターゲットの ISA にストリーミング拡張機能がない場合、このサブオプションは無効です。

%none

このオプションを完全に無効にします。

yes

このオプションは非推奨です。代わりに、-xvector=lib を指定します。

no

このオプションは非推奨です。代わりに、-xvector=%none を指定します。

デフォルトは、x86 では -xvector=simd で、SPARC プラットフォームでは -xvector=%none です。サブオプションなしで -xvector を指定する場合、コンパイラは、x86 Oracle Solaris では -xvector=simd,lib、SPARC Oracle Solaris では -xvector=lib、Linux プラットフォームでは -xvector=simd を想定します。

このオプションは、以前のインスタンスをオーバーライドするため、-xvector=%none は以前に指定された -xvector=lib を取り消します。

コンパイラは、リンク時に libmvec ライブラリを取り込みます。

コンパイルとリンクを別のコマンドで行う場合は、リンクの CC コマンドでも必ず同じ -xvector オプションを使用してください。

-xvis[={yes|no}]

(SPARC) <vis.h> ヘッダーを含めて VIS 命令を生成する場合、または VIS 命令を使用するアセンブラのインラインコード (.il) を使用する場合は、-xvis=yes を指定してコンパイルします。デフォルトは -xvis=no です。-xvis と指定すると -xvis=yes と指定した場合と同様の結果が得られます。

VIS 命令セットは、SPARC V9 命令セットの拡張機能です。UltraSPARC プロセッサが 64 ビットの場合でも、多くの場合、特にマルチメディアアプリケーションではデータサイズが 8 ビットまたは 16 ビットに制限されています。VIS 命令は 1 つの命令で 4 つの 16 ビットデータを処理できるので、画像、線形代数、信号処理、オーディオ、ビデオ、ネットワーキングなどの新しいメディアを扱うアプリケーションのパフォーマンスが大幅に向上させます。

-xvpara

OpenMP を使用するときに正しくない結果をもたらす可能性のある、並列プログラミングに関連する潜在的な問題に関して、警告を発行します。-xopenmp および OpenMP API 指令とともに使用します。

次の状況が検出された場合は、コンパイラは警告を発行します。

  • 異なるループ繰り返し間でデータに依存関係がある場合に、MP ディレクティブを使用して並列化されたループ。

  • OpenMP データ共有属性節に問題がある場合。たとえば、OpenMP 並列領域内でアクセスされるとデータの競合が発生する可能性のある変数「shared」の宣言や、並列領域内にある値が並列領域のあとに使用される変数「private」の宣言などです。

すべての並列化命令が問題なく処理される場合、警告は表示されません。

例:

CC -xopenmp -xvpara any.cc
-xwe

0 以外の終了ステータスを返すことによって、すべての警告をエラーに変換します。

-Yc,path

コンポーネント c がある場所の新しいパスを指定します。

コンポーネントの場所が指定されている場合、そのコンポーネントの新しいパス名は path/component_name です。このオプションは ld に渡されます。

値:

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

p

cpp のデフォルトのディレクトリを変更します。

0

ccfe のデフォルトのディレクトリを変更します。

a

fbe のデフォルトのディレクトリを変更します。

2

iropt のデフォルトのディレクトリを変更します。

c

cg (SPARC) のデフォルトのディレクトリを変更します。

O

ipo のデフォルトのディレクトリを変更します。

k

CClink のデフォルトのディレクトリを変更します。

l

ld のデフォルトのディレクトリを変更します。

f

c++filt のデフォルトのディレクトリを変更します。

m

mcs のデフォルトのディレクトリを変更します。

u

ube (x86) のデフォルトのディレクトリを変更します。

A

すべてのコンパイラコンポーネントを検索するときのディレクトリを指定します。path にコンポーネントが見つからない場合は、コンパイラがインストールされているディレクトリに戻って検索が行われます。

P

デフォルトのライブラリ検索パスにパスを追加します。デフォルトのライブラリ検索パスの前にこのパスが調べられます。

S

起動オブジェクトファイル用のデフォルトディレクトリを変更します。

相互の関連性:

コマンド行に複数の -Y オプションを配置できます。2 つ以上の -Y オプションが 1 つの項目に適用されている場合には、最後に指定されたものが有効です。

関連項目: Oracle Solaris のリンカーとライブラリガイド

-z arg

リンクエディタのオプション。

-xMerge-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

詳細は、ld(1) のマニュアルページおよび Oracle Solaris の『リンカーとライブラリガイド』を参照してください。

プラグマ

次の #pragmas はコンパイルシステムに認識されます。

#pragma align
#pragma does_not_read_global_data
#pragma does_not_return
#pragma does_not_write_global_data
#pragma dumpmacros
#pragma end_dumpmacros
#pragma fini
#pragma hdrstop
#pragma ident
#pragma init
#pragma must_have_frame
#pragma pack
#pragma rarely_called
#pragma returns_new_memory
#pragma unknown_control_flow
#pragma weak

#pragma does_not_read_global_data
#pragma does_not_write_global_data
#pragma no_side_effect 

SPARC のみ:

#pragma no_side_effect

これらのプラグマの詳細は、『C++ ユーザーズガイド』を参照してください。

環境変数

SUN_PROFDATA=profdir

設定すると、-xprofile=collect を指定してコンパイルされたプログラムから収集されたプロファイルデータが、プログラムが実行された時点での現在の作業ディレクトリ内の profdir という名前のディレクトリに格納されます。コンパイル時に、オプションの引数 :profdir-xprofile=collect[:profdir] に指定した場合、SUN_PROFDATA は無効になります。

SUN_PROFDATA_DIR=dirname

設定すると、-xprofile=collect を指定してコンパイルしたプログラムから収集されたプロファイルデータが、UNIX のディレクトリ名が dirname であるディレクトリに格納されます。dirname が絶対パスでない場合は、プログラムが実行された時点での現在の作業用ディレクトリの相対パスであると解釈されます。コンパイル時に、オプションの引数 :profdir-xprofile=collect[:profdir] に指定した場合、SUN_PROFDATA_DIR は無効になります。

SUN_PROFDATA_REPLACE={objfile,program,all}

SUN_PROFDATA_REPLACE は、オブジェクトファイルの変更されたバージョンが実行時に検出されたときにリセットされるプロファイルデータのスコープを示します。SUN_PROFDATA_REPLACE は、指定されたプログラムの範囲のユニット内にあるプロファイルされたプログラムとプロファイルデータの整合性を保つために使用します。

SUN_PROFDATA_REPLACE の値とその意味を次に示します。

objfile

変更されたオブジェクトファイルのプロファイルデータをリセットします。

program

変更されたオブジェクトファイルが含まれているプログラムのすべてのオブジェクトファイルのプロファイルデータをリセットします。

all

オブジェクトファイルが変更された場合、プロファイルディレクトリのすべてのコンテンツをリセットします。

SUN_PROFDATA_REPLACE のデフォルト設定は SUN_PROFDATA_REPLACE=objfile です。

例:

 
% setenv SUN_PROFDATA_REPLACE program (csh)
$ export SUN_PROFDATA_REPLACE=program (ksh)

この設定で、変更されたオブジェクトファイルが含まれているプログラムが実行されると、そのプログラムのすべてのオブジェクトファイルのプロファイルデータがリセットされます。関連するオプションには、-xOn および -xipo=n があります。

SUN_PROFDATA_ASYNC_INTERVAL=async_interval

非同期のプロファイル収集を有効にするには、この環境変数を設定します。非同期のプロファイル収集では、プロファイルデータは実行されているプロセスから一定の間隔 (秒単位で指定) で収集されます。

環境変数 LD_AUDIT、LD_AUDIT_32、または LD_AUDIT_64 のいずれかに /usr/lib/{,64}/libxprof_audit.so.1 が設定されていない場合、SUN_PROFDATA_ASYNC_INTERVAL は無効です。

非同期のプロファイル収集では、MT セーフの mmap ベースのメモリーアロケータ (UMEM_OPTIONSbackend=mmap に設定することによって mmap ベースの割り当てが指定されている libumem (3LIB) など) が必要となります。

例: 64 ビットのプロセスからの 1 分間隔の非同期のプロファイル収集を有効にするには、次の環境変数を指定します。

 
$ env LD_AUDIT_64=/usr/lib/64/libxprof_audit.so.1 \
SUN_PROFDATA_ASYNC_INTERVAL=60 UMEM_OPTIONS=backend=mmap \
64-bit-program [program-args]
SUN_PROFDATA_ASYNC_VERBOSE=verbose

ゼロ以外を設定すると、非同期コレクタから標準エラー出力に詳細なメッセージが出力されます。非同期のプロファイル収集が有効ではない場合、SUN_PROFDATA_ASYNC_VERBOSE は無効です。

SUN_PROFDATA_CLEANUP_AFTER_EXIT=[0|1]

1 を設定すると、プロセスが exit() を呼び出した時間とプロセスの終了が完了した時間の間に、プロファイラがデータ構造体をクリーンアップします。0 を設定すると、アプリケーションが exit() を呼び出す前に終了していなかったアプリケーションスレッドによるプロファイル収集への有害な干渉が防止されます。詳細は、exit(3C) を参照してください。デフォルト設定は SUN_PROFDATA_CLEANUP_AFTER_EXIT=0 です。

ファイル

file.a

静的ライブラリ

file.C

入力ファイル

file.cc

入力ファイル

file.c++

入力ファイル

file.cpp

入力ファイル

file.cxx

入力ファイル

file.o

オブジェクトファイル

file.so

動的 (共有) ライブラリ

a.out

リンクされた出力

xprof_fini.o

-xprofile=collect を指定してコンパイルされたプログラムの初期化ハンドラおよびファイナライズハンドラ

関連項目

analyzer(1), as(1), c++filt(1), cc(1), csh(1), dbx(1), gprof(1) , ld(1), more(1), nm(1), prof(1), tcov(1)

C++ ユーザーズガイド

C++ 移行ガイド

プログラミング言語 C++』第 3 版、 Bjarne Stroustrup 著、Addison-Wesley 1997 年

『The C Programming Language』 B. W. Kernighan、D. M. Ritchie 共著、Prentice-Hall 1988 年

Oracle Solaris の『リンカーとライブラリガイド』

国際標準 (ISO/IEC FDIS 14882)、プログラミング言語 -- C++

特定の浮動小数点数学ライブラリルーチンは、errno 変数 (errno.h で定義されています) でエラーステータスを返します。コンパイラオプション -fast、-xbuiltin、-xlibmieee、-xlibmil、-xlibmopt を指定すると、コンパイラは浮動小数点関数の呼び出しを、errno 変数を設定しない同等の最適化されたコードに自由に置き換えることができます。さらに、-fast ではマクロ __MATHERR_ERRNO_DONTCARE が定義されるため、コンパイラは数学関数で errno を設定する必要がないと想定できます。結果として、errno の値または浮動小数点関数呼び出しのあとに発生した浮動小数点例外の値に依存するユーザーコードが、一貫性のない結果を生成する可能性があります。

この問題を回避する方法の 1 つとして、このようなコードを -fast などのオプションを使用してコンパイルしないようにします。

ただし、-fast の最適化が必要で、コードが浮動小数点ライブラリ呼び出しのあとに正しく設定される errno の値、または適切な浮動小数点例外が発生することに依存している場合は、次のオプションを使用してコンパイルしてください。

 
-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE \
-xnolibmopt  -xnolibmil

これをコマンド行の -fast のあとに使用することで、コンパイラはそのようなライブラリコールを最適化しなくなり、数学関数への呼び出しで errno が正しく設定されるようになります。