C++ ユーザーズガイド ホーム目次前ページへ次ページへ索引


第 3 章

C++ コンパイラオプション

この章では、Solaris 2.6、Solaris 7、および Solaris 8 で動作する CC コンパイラのコマンド行オプションについて詳しく説明します。ここで説明する機能は、特に断りがない限りすべてのプラットフォームに適用されます。特定のプラットフォームだけに有効な機能は SPARC または IA と明示します。詳細は、「はじめに」「マルチプラットフォーム対応」を参照してください。

次の表は、一般的なオプション構文の形式の例です。

表 3-1   オプションの構文形式の例
構文形式
-option1 -E
-optionvalue* -Ipathname
-option=value -xunroll=4
-option value -o filename
1 option はオプション名、value は値、pathname はパス名、filename はファイル名を示します。


各オプションの説明での表記規則は 「書体と記号について」を参照してください。

大括弧、括弧、中括弧、パイプ記号、省略記号は、オプションの説明に使用しているもので、オプションの一部ではありません。

オプションを使用する際の一般的な注意事項は次のとおりです。

ソースファイル、オブジェクトファイル、ライブラリは、コマンド行に指定された順序でコンパイルおよびリンクされます。

機能別に見たオプションの要約

この節には、参照しやすいように、コンパイラオプションが機能別に分類されています。

コード生成オプション

コード生成オプションの要約をアルファベット順に示します。

表 3-2   コード生成オプション
処理 オプション
コンパイラの主要リリースとの互換モードを設定する。 -compat
C++ インライン関数を展開しない。 +d
仮想テーブル生成を制御する。 +e(0|1)
デバッグ用にコンパイルする。 -g
位置に依存しないコードを生成する。 -KPIC
位置に依存しないコードを生成する。 -Kpic
マルチスレッドコード用のコンパイルとリンクを行う。 -mt
コードのアドレス空間を指定する。 -xcode=a
データセグメントとテキストセグメントをマージする。 -xMerge
リンカーオプション -z arg


デバッグオプション

デバッグオプションの要約をアルファベット順に示します。

表 3-3   デバッグオプション
処理 オプション
C++ インライン関数を展開しない。 +d
ドライバがコンパイラに渡すオプションを表示するが、コンパイルはしない。 -dryrun
C++ ソースファイルにプリプロセッサを実行し、結果を stdout に出力するが、コンパイルはしない。 -E
デバッグ用にコンパルする。 -g
デバッグ用にコンパイルするが、インライン機能は無効にしない。 -g0
インクルードされたファイルのパス名を出力する。 -H
コンパイルで作成される一時ファイルを保存する。 -keeptmp
以前のリリースからの移行に関する情報の参照先を表示する。 -migration
ソースの前処理だけを行う。.i ファイルに出力する。 -P
オプションをコンパイル中の各処理に直接渡す。 -Qoption
README ファイルの内容を表示する。 -readme
実行可能ファイルからシンボルテーブルを取り除く。 -s
一時ファイルのディレクトリを指定する。 -temp=dir
コンパイラのメッセージの詳細度を制御する。 -verbose=vlst
コンパイラオプションの要約を一覧表示する。 -xhelp=flags
インクリメンタルリンカーを無効にする。 -xildoff
インクリメンタルリンカーを有効にする。 -xildon
オブジェクト (.o) ファイルなしに dbx でデバッグできるようにする。 -xs
WorkShop ソースコードブラウザ用のテーブル情報を作成する。 -xsb
ソースブラウザ情報を作成するだけでコンパイルはしない。 -xsbfast


浮動小数点オプション

浮動小数点オプションの要約をアルファベット順に示します。

表 3-4   浮動小数点オプション
処理 オプション
SPARC 非標準浮動小数点モードを有効または無効にする。 -fns[=(no|yes)]
(IA) 浮動小数点精度モードを設定する。 -fprecision=p
起動時に IEEE 丸めモードを有効にする。 -fround=r
浮動小数点最適化の設定を行う。 -fsimple=n
(IA) 浮動小数点式の精度を強制的に使用する。 -fstore
起動時に IEEE トラップモードを有効にする。 -ftrap=tlst
(IA) 浮動小数点式の精度を強制しない。 -nofstore
例外時に libm が数学ルーチンに対し IEEE 754 の値を返す。 -xlibmieee


言語オプション

言語オプションの要約をアルファベット順に示します。

表 3-5   言語オプション
処理 オプション
コンパイラの主要リリースとの互換モードを設定する。 -compat
さまざまな C++ 言語機能を有効または無効にする。 -features=alst


ライブラリオプション

ライブラリリンクオプションの要約をアルファベット順に示します。

表 3-6   ライブラリオプション 
処理 オプション
ライブラリのリンク形式を、シンボリック、動的、静的のいずれかから指定する。 -Bbinding
実行可能ファイル全体に対し動的ライブラリを使用できるかどうか指定する。 -d(y|n)
実行可能ファイルではなく動的共有ライブラリを構築する。 -G
生成される動的共有ライブラリに名前を割り当てる。 -hname
ld(1) がどのような LD_LIBRARY_PATH 設定も無視する。 -i
dir に指定したディレクトリを、ライブラリの検索に使用するディレクトリとして追加する。 -Ldir
リンカーのライブラリ検索リストに liblib.a または liblib.so を追加する。 -llib
特定のライブラリとそれに対応するファイルをコンパイルとリンクに強制的に組み込む。 -library=llst
マルチスレッドコード用のコンパイルとリンクを行う。 -mt
ライブラリのパスを実行可能ファイルに組み込まない。 -norunpath
共有動的ライブラリの検索パスを実行可能ファイルに組み込む。 -Rplst
静的にリンクする C++ ライブラリを指定する。 -staticlib=llst
アーカイブライブラリを作成する。 -xar
例外時に libm が数学ルーチンに対し IEEE 754 の値を
返す。
-xlibmieee
最適化のために、選択された libm ライブラリルーチンをインライン展開する。 -xlibmil
最適化された数学ルーチンを使用する。 -xlibmopt
(SPARC) Sun Performance LibraryTM とリンクする。 -xlic_lib=sunperflib
デフォルトのシステムライブラリとのリンクを無効にする。 -xnolib
コマンド行の -xlibmil を取り消す。 -xnolibmil
数学ルーチンライブラリを使用しない。 -xnolibmopt
書き込み不可で割り当て可能なセクションに対する
再配置が残っている場合には致命的エラーとする。
-ztext


ライセンスオプション

ライセンスオプションの要約をアルファベット順に示します。

表 3-7   ライセンスオプション
処理 オプション
ライセンスの待ち行列化を無効にする。 -noqueue
(SPARC) Sun Performance LibraryTM とリンクする。 -xlic_lib=sunperf
ライセンスサーバー情報を表示する。 -xlicinfo


廃止オプション

次のオプションはすでに廃止されているか、将来廃止されます。

表 3-8   廃止オプション
処理 オプション
コンパイラは無視する。将来のリリースのコンパイラがこのオプションを別の意味で使用する可能性もある。 -ptr
将来のリリースで削除される。 -vdelx


出力オプション

次に、出力オプションについてアルファベット順に要約します。

表 3-9   出力オプション 
処理 オプション
コンパイルのみ。オブジェクト (.o) ファイルを作成するが、リンクはしない。 -c
ドライバがコンパイラに渡すオプションを表示するが、コンパイルはしない。 -dryrun
C++ ソースファイルにプリプロセッサを実行し、結果を stdout に出力するが、コンパイルはしない。 -E
実行可能ファイルではなく動的共有ライブラリを
構築する。
-G
インクルードされたファイルのパス名を出力する。 -H
以前のリソースからの移行に関する情報の参照先を表示する。 -migration
出力ファイルや実行可能ファイルの名前を filename にする。 -o filename
ソースの前処理だけを行い、.i ファイルに出力する。 -P
CC ドライバが、型が sourcetype の出力を作成する。 -Qproduce sourcetype
実行可能ファイルからシンボルテーブルを取り除く。 -s
コンパイラメッセージの詳細度を制御する。 -verbose=vlst
必要に応じて追加の警告を出力する。 +w
警告メッセージを抑止する。 -w
コンパイラオプションの要約を一覧表示する。 -xhelp=flags
README ファイルの内容を表示する。 -xhelp=readme
メークファイルの依存情報を出力する。 -xM
依存情報を生成するが、/usr/include は除く。 -xM1
WorkShop ソースコードブラウザ用のテーブル情報を作成する。 -xsb
ソースブラウザ情報を作成するだけでコンパイルは
しない。
-xsbfast
コンパイル処理ごとの実行時間を報告する。 -xtime
ゼロ以外の終了状態を返すことによって、すべての警告をエラーに変換する。 -xwe
リンカーオプション -z arg


パフォーマンスオプション

パフォーマンスオプションの要約をアルファベット順に示します。

表 3-10   パフォーマンスオプション 
処理 オプション
最適な実行速度が得られるコンパイルオプションの組み合わせを選択する。 -fast
実行可能ファイルからシンボルテーブルを取り除く。 -s
ターゲットのアーキテクチャ命令セットを指定する。 -xarch=isa
(SPARC) オプティマイザのターゲットキャッシュ属性を定義する。 -xcache=c
一般的な SPARC アーキテクチャ用のコンパイルを行う。 -xcg89
SPARC V8 アーキテクチャ用のコンパイルを行う。 -xcg92
ターゲットのプロセッサチップを指定する。 -xchip=c
リンカーによる関数の順序変更を有効にする。 -xF
最適化のために、選択された libm ライブラリルーチンをインライン展開する。 -xlibmil
(SPARC) 最適化された数学ルーチンライブラリを
使用する。
-xlibmopt
コマンド行の -xlibmil を取り消す。 -xnolibmil
数学ルーチンライブラリを使用しない。 -xnolibmopt
最適化レベルを level にする。 -xOlevel
(SPARC) 一時レジスタの使用を制御する。 -xregs=r
(SPARC) メモリーに関するトラップを起こさないものとする。 -xsafe=mem
(SPARC) コードサイズを増やす最適化は行わない。 -xspace
ターゲットの命令セットと最適化のシステムを指定する。 -xtarget=t
可能であればループの最適化を行う。 -xunroll=n


プリプロセッサオプション

プリプロセッサオプションの要約をアルファベット順に示します。

表 3-11   プリプロセッサオプション
処理 オプション
シンボル name をプリプロセッサに定義する。 -Dname[=def]
C++ ソースファイルにプリプロセッサを実行し、結果を stdout に出力するが、コンパイルはしない。 -E
ソースの前処理だけを行い、.i ファイルに出力する。 -P
プリプロセッサシンボル name の初期定義を削除する。 -Uname
メークファイルの依存情報を出力する。 -xM
依存情報を生成するが、/usr/include は除く。 -xM1


プロファイルオプション

プロファイルオプションの要約についてアルファベット順に示します。

表 3-12   プロファイルオプション
処理 オプション
prof でプロファイル処理するためのデータを収集するオブジェクトコードを用意する。 -p
プロファイル処理のためのコードを生成する。 -xa
gprof プロファイラによるプロファイル処理用にコンパイルする。 -xpg
実行時プロファイルデータを収集したり、このデータを使って最適化する。 -xprofile=tcov


リファレンスオプション

次のオプションはコンパイラ情報を簡単に参照するためのものです。

表 3-13   リファレンスオプション
処理 オプション
以前のコンパイラからの移行に関する情報の参照先を表示する。 -migration
コンパイラオプションの要約を一覧表示する。 -xhelp=flags
README ファイルの内容を表示する。 -xhelp=readme


ソースオプション

ソースオプションの要約をアルファベット順に示します。

表 3-14   ソースオプション
処理 オプション
#include ファイルの検索パスに pathname を追加する。 -Ipathname
メークファイル依存情報を出力する。 -xM
依存情報を生成するが、/usr/include は除く。 -xM1


テンプレートオプション

テンプレートオプションの要約をアルファベット順に示します。

表 3-15   テンプレートオプション
処理 オプション
テンプレートインスタンスの位置とリンケージを制御する。 -instances=a
テンプレートソースの検索ディレクトリを追加指定する。 -ptipath
さまざまなテンプレートオプションを有効または無効にする。 -template=w


スレッドオプション

スレッドオプションの要約をアルファベット順に示します。

表 3-16   スレッドオプション
処理 オプション
マルチスレッドコード用のコンパイルとリンクを行う。 -mt
(SPARC) メモリーに関するトラップを起こさないものとする。 -xsafe=mem


オプション情報の構成

簡単に情報を検索できるように、次の見出しに分けてコンパイラオプションを説明しています。オプションが他のオプションで置き換えられたり、他のオプションと同じである場合、詳細については他のオプション説明を参照してください。

表 3-17   オプションの見出し 
見出し 内容
オプションの定義 各オプションのすぐ後には短い定義があります (小見出しはありません)。
オプションに値がある場合は、その値を示します。
デフォルト オプションに一次または二次のデフォルト値がある場合は、それを示します。 一次のデフォルトとは、オプションが指定されなかったときに有効になるオプションの値です。たとえば、-compat を指定しないと、デフォルトは -compat=5 になります。 二次のデフォルトとは、オプションは指定されたが、値が指定されなかったときに有効になるオプションの値です。たとえば、値を指定せずに -compat を指定すると、デフォルトは -compat=4 になります。
展開 オプションにマクロ展開がある場合は、ここに示します。
オプションの説明のために例が必要な場合は、ここに示します。
相互の関連性 他のオプションとの相互の関連性がある場合は、その関係をここに示します。たとえば「-xO が 3 より小さい場合は、-xinline オプションを使用すべきではありません」などです。
警告 オプションの使用について注意がある場合はここに示します。予測できない動作の原因となる操作についてもここに示します。
関連項目 ここには、参考情報が得られる他のオプションや文書を示します。
置き換え、同じなどの言葉 そのオプションが廃止され、他のもので置き換えられていたり、そのオプションの代わりに別のオプションを使用する方がよい場合は、置き換えるオプションを「置き換え」や「同じ」という表記とともに示しています。このような指示のあるオプションは、将来のリリースでサポートされない可能性があります。 一般的な意味と目的が同じであるオプションが 2 つある場合は、望ましいオプションを示します。たとえば、「-xO と同じです」は、-xO が望ましいオプションであることを示します。


オプションの一覧

-386

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

-486

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

-a

-xa と同じです。

-Bbinding

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

-B オプションを使用すれば、同じコマンド行で指定を何回も切り替えることができます。このオプションはリンカー (ld) に渡されます。


注 - Solaris 7 および Solaris 8 プラットフォームでは、必ずしもすべてのライブラリが静的ライブラリとして使用できるわけではありません。

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

binding の値 意味
dynamic まず liblib.so (共有) ファイルを検索するようにリンカーに指示します。これらのファイルが見つからないと、リンカーはliblib.a (静的で、共有されない) ファイルを検索します。ライブラリのリンク方式を共有にしたい場合は、このオプションを指定します。
static -Bstatic オプションを指定すると、リンカーは liblib.a (静的で、共有されない) ファイルだけを検索します。ライブラリのリンク形式を非共有にしたい場合は、このオプションを指定します。
symbolic ld(1) のマニュアルページを参照してください。


(-Bbinding との間に空白があってはなりません。)

デフォルト

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

相互の関連性

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

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

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

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

警告

コンパイルとリンクを別々に行う場合で。コンパイル時に -Bbinding オプションを使用した場合は、このオプションをリンク時にも指定する必要があります。

共有ライブラリを互換モード (-compat[=4]) で作成する場合、そのライブラリに例外が含まれる場合は、-Bsymbolic を使用しないでください。必要な例外の捕獲に失敗してしまう可能性があります。

関連項目

-nolibstaticlibld(1)、「標準ライブラリの静的リンク」、『リンカーとライブラリ』

-c

コンパイルのみ。オブジェクト .o ファイルを作成しますが、リンクはしません。

この オプションは ld によるリンクを抑止し、各ソースファイルに対する .o ファイルを 1 つずつ生成するように、CC ドライバに指示します。コマンド行にソースファイルを 1 つだけ指定する場合には、-o オプションでそのオブジェクトファイルに明示的に名前を付けることができます。

CC -c x.cc と入力すると、x.o というオブジェクトファイルが生成されます。

CC -c x.cc -o y.o と入力すると、y.o というオブジェクトファイルが生成
されます。

警告

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

関連項目

-o filename

-cg[89|92]

-xcg[89|92] と同じです。

-compat [=(4|5)]

コンパイラの主要リリースとの互換モードを設定します。このオプションは、__SUNPRO_CC_COMPAT__cplusplus マクロを制御します。

C++ コンパイラには主要なモードが 2 つあります。1 つは互換モードで、4.2 コンパイラで定義された ARM の意味解釈と言語が有効です。もう1 つは標準モードです。このモードでは、構文は ANSI/ISO 標準に従っていなければなりません。これらのモードには互換性はありません。ANSI/ISO 標準では、名前の符号化、vtable の配置、その他の ABI の細かい点で互換性のない変更がかなり必要であるためです。これらのモードは、次に示す -compat オプションで指定します。

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

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


デフォルト

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

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

__SUNPRO_CC は、-compat の設定に関係なく 0x510 に設定されます。

相互の関連性

-compat [=4} を使用する場合には、-xarch=v9-xarch=v9a-xarch=v9b はサポートされません。

関連項目

『C++ 移行ガイド』

+d

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

相互の関連性

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

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

関連項目

-g0-g

-Dname[=def]

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

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

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

表 3-18   SPARC と IA 用の事前定義シンボル 
名前
__ARRAYNEW 「配列」形式の operator newoperator delete を有効にしてコンパイルした場合に使用される。
詳細は -features=[no%]arraynew を参照
__BOOL ブール型を有効にした場合に使用される。詳細は-features=[no%]bool を参照
__BUILTIN_VA_ARG_INCR varargs.hstdarg.hsys/varags.h のキーワードが __builtin_alloca__builtin_va_alist__builtin_va_arg_incr の場合に使用される。
__cplusplus
__DATE__
__FILE__
__LINE__
__STDC__
__sun
sun 「相互の関連性」を参照。
__SUNPRO_CC=0x510 __SUNPRO_CC の値はコンパイラのリリース番号を表す。
__SUNPRO_CC_COMPAT=(4|5) 「-compat [=(4|5)]」を参照。
__SVR4
__TIME__
__'uname -s'_'uname -r' uname -suname -s の出力で、uname -runame -r の出力。無効な文字 (ピリオドなど) は下線で置き換えられる(例: -D__SunOS_5_7-D__SunOS_5_8 )。
__unix
unix 「相互の関連性」を参照。


表 3-19   UNIX 用の事前定義シンボル
名前
_WCHAR_T


表 3-20   SPARC 用の事前定義シンボル
名前
__sparc 32 ビットコンパイルモードのみ
sparc 「相互の関連性」を参照。


表 3-21   SPARC v9 用の事前定義シンボル
名前
__sparcv9 64 ビットコンパイルモードのみ


表 3-22   IA 用の事前定義シンボル
名前
__i386
i386 「相互の関連性」を参照。


デフォルト

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

相互の関連性

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

関連項目

-U

-d(y|n)

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

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

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

意味
-dy リンカーで動的リンクを実行します。
-dn リンカーで静的リンクを実行します。


デフォルト

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

関連項目

ld(1)、『リンカーとライブラリ』

-dalign

(SPARC ) 可能な場合には、ダブルワードのロードとストア命令を生成してパフォーマンス向上を図ります。

このオプションは、double 型のデータがすべて double の境界から始まることを前提としています。

警告

あるプログラム単位を -dalign でコンパイルした場合は、プログラムのすべての単位を -dalign でコンパイルしなければなりません。そうしないと予期しない結果が生じることがあります

-dryrun

ドライバによって作成されたコマンドを表示しますが、コンパイルはしません。

このオプションは、コンパイルドライバが作成したサブコマンドの表示のみを行い、実行はしないように CC ドライバ に指示します。

-E

ソースファイルに対してプリプロセッサを実行しますが、コンパイルはしません。

C++ のソースファイルに対してプリプロセッサだけを実行し、結果を stdout (標準出力) に出力するよう CC ドライバに指示します。コンパイルは行われません。したがって .o ファイルは生成されません。

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

このオプションは、プルプロセッサの処理結果を知りたいときに便利です。たとえば、次のようなプログラム foo.cc があるとします。

コード例 3-1   foo.cc
#if __cplusplus < 199711L
int power(int, int);
#else
template <> int power(int, int);
#endif

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

このプログラム結果は次のようになります。

コード例 3-2   -E オプションを使用したときの foo.cc の出力
example% CC -E foo.cc
#4 "foo.cc"
template < > int power ( int , int ) ; 

 

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

警告

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

関連項目

-P

+e(0|1)

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

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

意味
0 仮想テーブルを生成せず、必要とされているテーブルへの外部参照を生成します。
1 仮想関数を使用して定義したすべてのクラスごとに仮想テーブルを生成します。


相互の関連性

このオプションを使用してコンパイルする場合は、-features=no%except オプションも使用してください。使用しなかった場合は、例外処理で使用される内部型の仮想テーブルがコンパイラによって生成されます。

関連項目

『C++ 移行ガイド』

-fast

コンパイルオプションの最適な組み合わせを選択し、実行速度を最適化します。

このオプションは、コードをコンパイルするマシン上でコンパイラオプションの最適な組み合わせを選択して実行速度を向上するマクロです。

拡張

このオプションは、次のコンパイラオプションを組み合せて、多くのアプリケーションのパフォーマンスをほぼ最大にします。

表 3-23   -fast 展開
オプション SPARC IA
-dalign
-fns
-fsimple=2
-ftrap=%none
-nofstore
-xlibmil
-xlibmopt
-xO5
-xtarget=native


相互の関連性

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

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

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

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

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

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

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

    example% CC -fast -xO3

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

    examle% CC -xO3 -fast

警告

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

    example% CC -fast test.cc

IEEE 標準の浮動小数点演算を使用しているプログラムには、-fast を指定しないでください。計算結果が違ったり、プログラムが途中で終了する、あるいは予期しない SIGFPE シグナルが発生する可能性があります。

以前のリリースの SPARC では、-fast マクロは -fsimple=1 に展開されました。現在では、-fsimple=2 に展開されます。

以前のリリースでは、-fast マクロは -xO4 に展開されました。現在では、-xO5 に展開されます。


注 - 以前の SPARC リリースでは -fast マクロに -fnonstd が含まれていましたが、このリリースでは含まれていません。-fast では、非標準浮動小数点モードは初期化されません。『数値計算ガイド』と ieee_sun(3M) のマニュアルページを参照してください。

関連項目

-dalign-fns-fsimple-ftrap=%none-libmil-nofstore-xO5
-xlibmopt-xtarget=native

-features=a[,...a]

コンマで区切って指定された C++ 言語のさまざまな機能を、有効または無効にします。

互換モード (-compat[=4]) と標準モード (デフォルトのモード) の両方で、a に次の値の 1 つを指定できます。

表 3-24   互換モードと標準モードでの -feature オプション 
a の値 意味
%all 指定されているモードに対して有効なすべての -feature オプションを有効にします。
[no%]altspell トークンの代替スペル (たとえば、&& の代わりの and) を認識します [しません]。
[no%]anachronisms 廃止されている構文を許可します [しません]。無効にした場合 (つまり、-features=no%anachronisms)、廃止されている構文は許可されません。
[no%]bool ブール型とリテラルを許可します [しません]。有効にした場合、マクロ _BOOL=1 が定義されます。無効にした場合、マクロは定義されません。
[no%]conststrings リテラル文字列を読み取り専用メモリーに入れます [入れません]。
[no%]except C++ 例外を許可します [しません]。C++ 例外を無効にした場合 (つまり、-features=no%except)、関数に指定された throw は受け入れられますが無視されます。つまり、コンパイラは例外コードを生成しません。キーワード trythrow、および catch は常に予約されています
[no%]export キーワード export を認識します [しません]。
[no%]iddollar 識別子の最初以外の文字に $ を許可します [しません]。
[no%]localfor for 文に対して新しい局所スコープ規則を使用します [しません]。
[no%]mutable キーワード mutable を認識します [しません]。
%none 指定されているモードに対して無効にできるすべての機能を無効にします。


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

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


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


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

表 3-26   互換モードだけに使用できる -features オプション 
a の値 意味
[no%]arraynew operator newoperator delete の配列形式を認識します [しません] (たとえば、operator new [] (void*))。これを有効にすると、マクロ __ARRAYNEW=1 が定義されます。有効にしないと、マクロは定義されません。
[no%]explicit キーワード explicit を認識します [しません]。
[no%]namespace キーワード namespaceusing を許可します [しません]。
[no%]rtti 実行時の型識別 (RTTI) を許可します [しません]。dynamic c_cast<> および typeid 演算子を使用する場合は、RTTI を有効にする必要があります。詳細は、『C++ プログラミングガイド』の「実行時の型識別」を参照してください。



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

デフォルト

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

関連項目

『C++ 移行ガイド』

-flags

-xhelp=flags と同じです。

-fnonstd

(IA) 浮動小数点ハードウェアの非標準的な初期設定を行います。

このオプションを指定すると、次の操作も可能になります。

これらの結果は SIGFPE シグナルに変換されますが、プログラムに SIGFPE ハンドラがない場合は、メモリーダンプを行なってプログラムを終了します。ただし、コアダンプのサイズがゼロに設定されている場合を除きます。

デフォルト

-fnonstd を指定しないと、IEEE 754 浮動小数点演算例外が起きても、プログラムは異常終了しません。アンダーフローは段階的です。

関連項目

-fns-ftrap=common、『数値計算ガイド』

-fns[=(no|yes)]

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

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

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

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

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

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

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


デフォルト

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

-fns だけを指定すると、-fns=yes とみなされます。

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

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

警告

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

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

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

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

関連項目

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

-fprecision=p

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

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

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

p の値 意味
single IEEE 単精度値に丸めます。
double IEEE 倍精度値に丸めます。
extended 利用可能な最大の精度に丸めます。


psingledouble であれば、丸め精度モードは、プログラムの実行が始まるときに、それぞれ singledouble 精度に設定されます。pextended であるか、
-fprecision フラグが使用されていなければ、丸め精度モードは extended 精度のままです。

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

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

デフォルト

-fprecision フラグを指定しないと、丸め精度モードは extended になります。

警告

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

-fround=r

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

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

内容は、ieee_flags サブルーチンと同じです。これは実行時のモードを変更するために使用します。

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

r の値 意味
nearest
tozero
negative
positive
最も近い数値に丸め、中間値の場合は偶数にします。
ゼロに丸めます。
負の無限大に丸めます。
正の無限大に丸めます。


デフォルト

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

警告

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

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

-fsimple[=n]

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

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

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

n の値 意味
0 仮定の設定を許可しません。IEEE 754 に厳密に準拠します。
1 安全な簡略化を行います。その結果生成されたコードは、IEEE 754 に厳密には合致していませんが、大多数のプログラムの数値結果は変わりません。 -fsimple=1 の場合、次に示す内容を前提とした最適化が行われます。

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

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

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

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


    -fsimple=1 の場合、四捨五入や例外を考慮せずに完全な最適化を行うことは許可されていません。特に浮動小数点演算は、丸めモードを保持した定数について実行時に異なった結果を出す演算に置き換えることはできません。
  • 2 これは浮動小数点演算の最適化を積極的に行い、丸めモードの変更によって多くのプログラムが異なった数値結果を出すようになります。たとえば、あるループ内の x/y の演算をすべて x*z に置き換えるような最適化を許可します。この最適化では、x/y はループ内で少なくとも 1 回評価されることが保証されており、yz にはループの実行中に定数値が割り当てられます。


    デフォルト

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

    -fsimple を指定しても n の値を指定しないと、-fsimple=1 が使用されます。

    相互の関連性

    -fast-fsimple=2 を意味します。

    警告

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

    関連項目

    -fast

    -fstore

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

    このオプションを無効にするには、-nofstore オプションを使用します。

    警告

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

    関連項目

    -nofstore

    -ftrap=t[,...t]

    起動時に IEEE 754 トラップモードを有効に設定します。

    このオプションは、プログラムの初期化時に設定される IEEE 754 トラップモードを設定しますが、SIGFPE ハンドラはインストールしません。トラップの設定と SIGFPE ハンドラのインストールを同時に行うには、ieee_handler を使用します。複数の値を指定すると、それらの値は左から右に処理されます。

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

    t の値 意味
    [no%]division ゼロによる除算をトラップします [しません]。
    [no%]inexact 正確でない結果をトラップします [しません]。
    [no%]invalid 無効な操作をトラップします [しません]。
    [no%]overflow オーバーフローをトラップします [しません]。
    [no%]underflow アンダーフローをトラップします [しません]。
    %all 上のすべてをトラップします。
    %none 上のどれもトラップしません。
    common 無効、ゼロ除算、オーバーフローをトラップします。


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

    IEEE トラップを有効にする場合は、-ftrap=common の設定をお勧めします。

    デフォルト

    -ftrap を指定しないと、-ftrap=%none が使用されます (トラップは自動的には有効にされません)。

    1 つ以上の値を指定すると、それらは左から右に処理されます。したがって、
    -ftrap=%all,no%inexact と指定すると、inexact を除くすべてのトラップが設定されます。

    相互の関連性

    モードは、実行時に ieee_handler(3M) で変更できます。

    警告

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

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

    x = 1.0 / 3.0;

    このオプションは、メインプログラムをコンパイルするときにだけ有効です。このオプションを使用する際には注意してください。IEEE トラップを有効にするには
    -ftrap=common を使用してください。

    関連項目

    ieee_handler(3M) のマニュアルページ

    -G

    実行可能ファイルではなく動的共有ライブラリを構築します。

    コマンド行で指定したソースファイルはすべて、デフォルトで -Kpic オプションでコンパイルされます。

    テンプレートを使用する共有ライブラリを作成する場合は、通常、テンプレートデータベースでインスタンス化されているテンプレート関数を、共有ライブラリに組み込む必要があります。このオプションを使用すると、これらのテンプレートが必要に応じて共有ライブラリに自動的に追加されます。

    相互の関連性

    -c (コンパイルのみのオプション) を指定しないと、次のオプションが ld に渡されます。

    警告

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

    関連項目

    -dy-Kpic-xcode=pic13-xildoff-ztextld(1) のマニュアルページ、『C++ ライブラリ・リファレンス』

    -g

    コンパイラとリンカーに、デバッガでデバッグ可能なファイルとプログラムを用意するように指示します。

    これには、次の処理が含まれています。

    相互の関連性

    このオプションと -xOlevel を一緒に使用した場合、デバッグ情報が限定されます。詳細は、「-xOlevel」を参照してください。

    このオプションを使用するとき、最適化レベルが -xO3 以下の場合、可能な限りのシンボリック情報とほぼ最高の最適化が得られます。末尾呼び出しの最適化とバックエンドのインライン化は無効です。

    このオプションを使用するとき、最適化レベルが -xO4 以上の場合、可能な限りのシンボリック情報と最高の最適化が得られます。

    このオプションを指定すると、+d オプションが自動的に指定されます。

    このオプションを指定すると、-xildon が指定されてデフォルトのリンカーがインクリメンタルリンカーのオプションになるため、コンパイル、編集、デバッグのサイクルを効率的に実行できます。

    次の条件のどれかが真でない場合は、ld ではなく ild が起動されます。

    関連項目

    +d-g0-xildoff-xildon-xs、および ld(1) のマニュアルページ、
    dbx コマンドによるデバッグ』(スタブの詳細について)

    -g0

    デバッグ用のコンパイルとリンクを行いますが、インライン展開は行いません。

    このオプションは、+d が有効化されないという点を除いて、-g と同じです。

    関連項目

    +d-g-xildon、『dbx コマンドによるデバッグ』

    -H

    インクルードされるファイルのパス名を出力します。

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

    -help

    -xhelp=flags と同じです。

    -hname

    生成する動的共有ライブラリに名前 name を割り当てます。これはローダー用のオプションで、ld に渡されます。通常、-h の後に指定する name (名前) は、-o の後に指定する名前と同じでなければなりません。-hname の間には、空白文字を入れても入れなくてもかまいません。

    コンパイル時のローダーは、指定された名前を作成中の動的共有ライブラリに割り当て、そのライブラリのイントリンシック名 (固有名) としてライブラリの中に記録します。
    -hname (名前) オプションを指定しないと、イントリンシック名はライブラリファイルに記録されません。

    実行可能ファイルはすべて、必要な共有ライブラリファイルのリストを持っています。実行時のリンカーは、ライブラリを実行可能ファイルにリンクするとき、ライブラリのイントリンシック名をこの共有ライブラリファイルのリストの中にコピーします。共有ライブラリにイントリンシック名がないと、リンカーは代わりにその共有ライブラリファイルのパス名を使用します。

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

    -i

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

    -Ipathname

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

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

    プリプロセッサは、インクルードファイルを次の順序で検索します。

    1. #include "foo.h" の形式のインクルードファイル (" " で囲まれたもの) については、そのソースファイルを含むディレクトリ内を検索する

    2. <foo.h> の形式のインクルードファイル (< > で囲まれたもの) については、そのソースファイルを含むディレクトリは検索しない

    3. -I オプションで指定された名前を持つディレクトリ (もしあれば)

    4. コンパイラ付属の C++ ヘッダーファイル、ANSI C ヘッダーファイル、および特別な目的のファイルが格納されているディレクトリ

    5. /usr/include ディレクトリ


      注 - 標準ヘッダーの処理は上記とは異なります。詳細は、「標準ヘッダーの実装」を参照してください。

    相互の関連性

    -ptipath (パス) を使用しない場合、コンパイラは -Ipathname (パス) 内のテンプレートファイルを検索します。-ptipath の代わりに -Ipathname を使用してください。

    -instances=a

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

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

    a の値 意味
    explicit 明示的にインスタンス化されたインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。必要なインスタンスがほかにあっても生成しません。
    extern 必要なすべてのインスタンスをテンプレートリポジトリに置き、それらに対して大域リンケージを行います (リポジトリのインスタンスが古い場合は、再びインスタンス化されます)。
    global 必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。
    semiexplicit 明示的にインスタンス化されたインスタンスを現在のオブジェクトファイルに置き、それらに対して大域リンケージを行います。明示的なインスタンスにとって必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して静的リンケージを行います。必要なインスタンスがほかにあっても生成しません。
    static 必要なすべてのインスタンスを現在のオブジェクトファイルに置き、それらに対して静的リンケージを行います。


    デフォルト

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

    関連項目

    第 4 章「テンプレートのコンパイル」

    -keeptmp

    コンパイル中に作成されたすべての一時ファイルを残しておきます。

    このオプションを -verbose=diags と一緒に使用すると、デバックに便利です。

    関連項目

    -v-verbose

    -KPIC

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

    (IA) -Kpic と同じです。

    -Kpic

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

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

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

    -Ldir

    ライブラリを検索するディレクトリに、dir (ディレクトリ) を追加します。

    このオプションは ld に渡されます。コンパイラが提供するディレクトリよりも dir が先に検索されます。

    -llib

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

    このオプションは ld に渡されます。通常のライブラリは、名前が liblib.a
    liblib.so の形式です (lib.a または .so の部分は必須です)。このオプションでは lib の部分を指定できます。コマンド行には、ライブラリをいくつでも指定できます。指定したライブラリは、-Ldir で指定された順に検索されます。

    -llib オプションはファイル名の後に指定してください。

    相互の関連性

    正しい順序でライブラリが検索されるようにするには、安全のため、必ずソースとオブジェクトの後に -lx を使用してください。

    警告

    libthread とリンクする場合は、ライブラリを正しい順序でリンクするために -lthread ではなく -mt を使用してください。

    POSIX スレッドを使用する場合は、-mt オプションと -lpthread オプションを使ってリンクする必要があります。-mt オプションが必要な理由は、libCrun (標準モード) と libC (互換モード) がマルチスレッド対応アプリケーションに対して libthread を必要とするためです。

    関連項目

    -Ldir-mt、『C++ ライブラリ・リファレンス』、『Tools.h++ 7.0.7 クラスライブラリ・リファレンスマニュアル』

    -libmieee

    -xlibmieee と同じです。

    -libmil

    -xlibmil と同じです。

    -library=l[,...l]

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

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

    表 3-27   互換モードでの -library オプション
    l の値 意味
    [no%]rwtools7 Tools.h++ バージョン 7 を使用します [しません]。
    [no%]rwtools7_dbg デバッグ可能な Tools.h++ バージョン 7 を使用します [しません]。
    [no%]complex 複素数の演算に libcomplex を使用します [しません]。
    [no%]libC C++ サポートライブラリ libC を使用します [しません]。
    [no%]gc ガベージコレクション libgc を使用します [しません]。
    [no%]gc_dbg デバッグ可能なガベージコレクション libgc を使用します [しません]。
    %all -library=%all-library=%none,rwtools7,complex,gc,libC を指定することと同じです
    %none C++ ライブラリを一切使用しません。


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

    表 3-28   標準モードでの -library オプション
    l の値 意味
    [no%]rwtools7 Tools.h++ バージョン 7 を使用します [しません]。
    [no%]rwtools7_dbg デバッグ可能な Tools.h++ バージョン 7を使用します [しません]。
    [no%]iostream 古い iostream ライブラリ libiostream を使用します [しません]。
    [no%]Cstd C++ 標準ライブラリ libCstd を使用します [しません]。コンパイラ付属の Cstd ヘッダーファイルをインクルードします [しません]。
    [no%]Crun C++ 実行時ライブラリ libCrun を使用します [しません]。
    [no%]gc ガベージコレクション libgc を使用します [しません]。
    [no%]gc_dbg デバッグ可能なガベージコレクション libgc を使用します [しません]。
    %all -library=%all-library=%none,rwtools7,gc,iostream,Cstd,Crun を指定することと同じです。
    %none libCrun の場合を除いてC++ ライブラリを使用しません。


    デフォルト

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

        example% CC -library=%none
    

    標準モードで RogueWave の Tools.h++ バージョン 7 ライブラリと iostream ライブラリを使用するには、次のコマンドを使用します。

        example% CC -library=rwtools7,iostream
    

    相互の関連性

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

    -library オプションを使用すると、指定したライブラリに対する -l オプションが正しい順序で送信されるようになります。たとえば、-library=rwtools7,iostream および -lirabary=iostream,rwtools7 のどちらでも、-l オプションは、-lrwtool -liostream の順序で ld に渡されます。

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

    RogueWave の Tools.h++ ライブラリは同時に 1 つしか使用できません。

    RogueWave の Tools.h++ バージョン 7 ライブラリは、従来の iostream を使って構築されています。このため、標準モードで Rouged Wave の Tools.h++ のライブラリを使用する場合は、libiostream も含める必要があります。詳細は、『C++ 移行ガイド』を参照してください。

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

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

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

    警告

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

    関連項目

    -I、-l、-R、-Y P、-staticlib=l、 -xnolib、
    「標準ライブラリヘッダーファイルに対する make の使用」
    『C++ ライブラリ・リファレンス』、『Tools.h++7.0 ユーザーズガイド』、
    『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』、
    『Standard C++ Class Library Reference』(英語版のみ)

    -library=no%cstd オプションを使用して、ユーザー独自の C++ 標準ライブラリの使用を有効にする方法については、「C++ 標準ライブラリの置き換え」を参照してください。

    -migration

    以前のバージョンのコンパイラ用に作成されたソースコードの移行に関する情報の参照先を表示します。

    -misalign

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

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

    このオプションは、プログラムの中に正しく境界整列されていないデータがあることをコンパイラに知らせます。したがって、境界整列が正しくない可能性があるデータに対しては、ロードやストアを非常に慎重に (つまり、1 度に 1 バイトずつ) 行う必要があります。このオプションを使用すると、実行速度が大幅に低下することがあります。低下する程度はアプリケーションによって異なります。

    相互の関連性

    SPARC プラットフォームで #pragma pack を使って、型のデフォルト境界整列よりも高い密度でデータをパックする場合は、アプリケーションのコンパイルとリンクに -misalign オプションを指定する必要があります。

    境界整列が正しくないデータは、実行時に ld のトラップ機構によって処理されます。-misalign オプションとともに最適化フラグ (-x0[1|2|3|4|5] またはそれと同等のフラグ) を使用すると、ファイル境界整列の正しくないデータを正しい境界に整列に合わせるための命令がオブジェクトに挿入されます。この場合には、実行時不正境界整列トラップは生成されません。

    警告

    できれば、プログラムの境界整列が正しい部分と境界整列が誤った部分をリンクしないでください。

    コンパイルとリンクを別々に行う場合は、-misalign オプションをコンパイルコマンドとリンクコマンドの両方で指定する必要があります。

    -mt

    マルチスレッド化したコードのコンパイルとリンクを行います。

    このオプションでは、次のことが行われます。

    アプリケーションやライブラリがマルチスレッド化されている場合は、-mt オプションが必要です。

    警告

    libthread とリンクする場合には、-lthread ではなく -mt オプションを使用してライブラリのリンク順序が正しくなるようにしてください。

    POSIX スレッドを使用する場合は、-mt オプションと -lpthread オプションを使ってリンクする必要があります。-mt オプションが必要な理由は、libCrun (標準モード) と libC (互換モード) がマルチスレッド対応のアプリケーションに対して libthread を必要とするためです。

    コンパイルとリンクを別々に実行する場合で、コンパイルで -mt を使用した場合は、次の例に示すようにリンクでも -mt を使用してください。そうしないと、予期しない結果が発生する可能性があります。

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

    関連項目

    -xnolib、『C++ プログラミング・ガイド』、『マルチスレッドのプログラミング』、『リンカーとライブラリ』、『C++ ライブラリ・リファレンス』

    -native

    -xtarget=native と同じです。

    -noex

    -features=no%except と同じです。

    -nofstore

    (IA) 浮動小数点式の精度を変換しない。

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

    関連項目

    -fstore

    -nolib

    -xnolib と同じです。

    -nolibmil

    -xnolibmil と同じです。

    -noqueue

    ライセンスを待ち行列に入れません。

    ライセンスを確保できない場合、コンパイラはコンパイル要求を待ち行列に入れず、コンパイルもしないで終了します。メークファイルのテストには、ゼロ以外の状態が返されます。

    -norunpath

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

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

    このオプションは、標準以外の位置にインストールされたコンパイラで生成した実行可能ファイルを、プログラムのユーザーがその非標準の位置で使う必要がない場合に便利です。

    相互の関連性

    共有ライブラリをコンパイラのインストールされている位置 (デフォルトのインストール先は /opt/SUNWspro/lib) で使用し、かつ -norunpath を使用する場合は、リンク時に -R オプションを使うか、または実行時に環境変数 LD_LIBRARY_PATH を設定して共有ライブラリの位置を明示しなければなりません。そうすることにより、実行時リンカーはその共有ライブラリを見つけることができます。

    -O

    -xO2 と同じです。

    -Olevel

    -xOlevel と同じです。

    -ofilename

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

    相互の関連性

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

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

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

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

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

    警告

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

    +p

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

    デフォルト

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

    相互の関連性

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

    -P

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

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

    関連項目

    -E

    -p

    prof でプロファイル処理するためのデータを収集するオブジェクトコードを作成します。-p は実行内容を記録し、正常終了時に mon.out というファイルを生成します。

    関連項目

    -xpg-xprofileanalyzer(1) のマニュアルページ、Sun WorkShop の『プログラムのパフォーマンス解析』

    -pentium

    (IA) -xtarget=pentium と置き換えられています。

    -pg

    -xpg と同じです。

    -PIC

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

    (IA) -Kpic と同じです。

    -pic

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

    (IA) -Kpic と同じです。

    -pta

    -template=wholeclass と同じです。

    -ptipath

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

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

    -ptipath よりも -Ipathname を使用すると混乱が起きにくくなります。

    関連項目

    -Ipathname

    -pto

    -instances=static と同じです。

    -ptr

    このオプションは廃止されたため、コンパイル時には無視されます。

    警告

    -ptr オプションは存在しても無視されますが、すべてのコンパイルコマンドから削除するようにしてください。これは将来のリリースで、-ptr が以前とは異なる動作のオプションとして再実装される可能性があるためです。

    関連項目

    レポジトリのディレクトリについては、「テンプレートレポジトリ」を参照してください。

    -ptv

    -verbose=template と同じです。

    -Qoption phase option[,...option]

    option (オプション) を phase (コンパイル段階) に渡します。

    複数のオプションを渡すには、コンマで区切って指定します。

    phase には、以下の値のいずれか 1 つを指定します。

    SPARC IA
    ccfe ccfe
    iropt cg386
    cg codegen
    cclink cclink
    ld ld


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

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

    警告

    意図しない結果にならないように注意してください。たとえば、ccfe-features=bool,castop を渡そうと次のように指示するとします。

        -Qoption ccfe -features=bool,castop
    

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

        -Qoption ccfe -features=bool -Qoption ccfe castop
    

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

        -Qoption ccfe -features=bool,-features=castop
    

    -qoption phase option

    -Qoption と同じです。

    -qp

    -p と同じです。

    -Qproduce sourcetype

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

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

    接尾辞 意味
    .i ccfe が作成する前処理済みの C++ のソースコード
    .o コードジェネレータ cg が作成するオブジェクトファイル
    .s cg が作成するアセンブラソース


    -qproduce sourcetype

    -Qproduce と同じです。

    -Rpathname[:...pathname]

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

    複数のパス名も指定できます (例: -R/path1:/path2)。

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

    デフォルト

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

    -xarch の値 デフォルトのライブラリ検索パス
    v9v9av9b install_dirctory/SUNWspro/lib/v9
    上記以外の値 install_directory/SUNWspro/lib


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

    相互の関連性

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

    関連項目

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

    -readme

    -xhelp=readme と同じです。

    -S

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

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

    -s

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

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

    -sb

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

    -sbfast

    -xsbfast と同じです。

    -staticlib=l[,...l]

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

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

    l の値 意味
    [no%]library library に指定できる値については 「-library=l[,...l]JDENG_NSUN_KAKKOEを参照してください。
    %all -library オプションに指定したすべてのライブラリが静的にリンクされます。
    %none 静的にリンクするライブラリはありません。


    デフォルト

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

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

        example% CC -staticlib=Crun ← 正しい
    

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

        example% CC -staticlib=gc ← 誤り
    

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

        example% CC -library=gc -staticlib=gc ← 正しい
    

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

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

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

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

    相互の関連性

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

    -xarch=v9-xarch=v9a-xarch=v9b のいずれかを使用する場合、静的ライブラリとしては使用できない C++ ライブラリがあります。

    警告

    ライブラリで使用できる値は安定したものではないため、リリースによって変わることがあります。

    関連項目

    -library「標準ライブラリの静的リンク」

    -temp=dir

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

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

    関連項目

    -keeptmp

    -template=w[,...w]

    さまざまなテンプレートオプションを実行可能または実行不能にします。

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

    w の値 意味
    [no%]wholeclass コンパイラに対し、使用されている関数だけインスタンス化するのではなく、テンプレートクラス全体をインスタンス化する [しない] ように指示します。クラスの少なくとも 1 つのメンバーを参照しなければなりません。そうでない場合は、コンパイラはそのクラスのどのメンバーもインスタンス化しません。
    [no%]extdef 別のソースファイルからテンプレート定義を検索します [しません]。


    デフォルト

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

    -time

    -xtime と同じです。

    -Uname

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

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

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

    相互の関連性

    すべての -U オプションは、(存在する場合は) すべての -D オプションの後で処理されます。

    -unroll=n

    -xunroll=n と同じです。

    -V

    -verbose=version と同じです。

    -v

    -verbose=diags と同じです。

    -vdelx

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

    delete[] を使用する式に対し、実行時ライブラリ関数 _vector_delete_ の呼び出しを生成する代わりに _vector_deletex_ の呼び出しを生成します。関数 _vector_delete_ は、削除するポインタおよび各配列要素のサイズという 2 つの引数をとります。

    関数 _vector_deletex__vector_delete_ と同じように動作しますが、3 つめの引数としてそのクラスのデストラクタのアドレスをとります。この引数はサン以外のベンダーが使用するためのもので、関数では使用しません。

    デフォルト

    コンパイラは、delete[] を使用する式に対して _vector_delete_ の呼び出しを生成します。

    警告

    これは旧式フラグであり、将来のリリースでは削除されます。サン以外のベンダーからソフトウェアを購入し、ベンダーがこのフラグの使用を推奨していない限り、このオプションは使用しないでください。

    -verbose=v[,...v]

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

    v には、次に示す値の 1 つを指定します。

    v の値 意味
    [no%]diags
    各コンパイル段階が渡すコマンド行を表示します [しません]。
    [no%]template
    テンプレートインスタンス化冗長モード (検証モードともいう) を起動します [しません]。冗長モードはコンパイル中にインスタンス化の各段階の進行を表示します。
    [no%]version
    CC ドライバに対し、呼び出したプログラムの名前とバージョン番号を表示するよう指示します [しません]。
    %all
    上のすべてを呼び出します。
    %none -verbose=%none-verbose=no%template,no%diags,no%version を指定することと同じです。


    v の値は複数指定することができます。たとえば、-verbose=template,diags とすることができます。

    デフォルト

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

    +w

    意図しない結果になるおそれがあるコードを識別します。

    次のような問題のありそうな構造について、追加の警告を生成します。

    デフォルト

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

    関連項目

    -w、 +w2

    +w2

    +w で発行される警告に加えて、技術的な違反についての警告を発行します。+w2 で行われる警告は、危険性はないが、プログラムの移植性を損なう可能性がある違反に対するものです。

    警告

    +w2 を指定してコンパイルすると、Solaris および C++標準ヘッダーファイルに関する警告が発行されることがあります。

    関連項目

    +w

    -w

    ほとんどの警告メッセージを抑止します。

    コンパイラが出す警告を出力しません。ただし、一部の警告、特に旧式の構文に関する重要な警告は抑制できません。

    関連項目

    +w

    -xa

    プロファイル用のコードを生成します。

    コンパイル時に TCOVDIR 環境変数を設定すれば、カバレージ (.d) ファイルを置くディレクトリを指定できます。この変数を設定しなければ、カバレージ (.d) ファイルは ソースファイルと同じディレクトリにソースファイルとして残ります。

    このオプションは、古いカバレージファイルとの下位互換を保つためだけに使用してください。

    相互の関連性

    -xprofile=tcov オプションと -xa オプションは、1 つの実行可能ファイルで同時に使用できます。つまり、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルからなるプログラムをリンクすることはできますが、両方のオプションを使って 1 つのファイルをコンパイルすることはできません。

    -xa オプションと -g を一緒に使用することはできません。

    警告

    コンパイルとリンクを別々に行う場合で、-xa でコンパイルした場合は、 リンクも-xa で行わなければなりません。そうしないと予期できない結果になることがあります。

    関連項目

    -xprofile=tcovtcov(1) のマニュアルページ、
    『プログラムのパフォーマンス解析』

    -xar

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

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

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

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

    警告

    テンプレートデータベースの .o ファイルをコマンド行に追加しないでください。

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

    関連項目

    第 6 章「ライブラリの構築」

    -xarch=isa

    対象となる命令セットアーキテクチャ (ISA) を指定します 。

    このオプションは、コンパイラが生成するコードを、指定した命令セットアーキテクチャの命令だけに制限します。つまり、指定した命令セットだけを許可します。このオプションを使用すると、ターゲットアーキテクチャに固有の命令が使用できない可能性があります。

    SPARC プラットフォームの場合

    表 3-29 に、SPARC プラットフォームでの各 -xarch キーワードの詳細を示します。

    表 3-29   SPARC プラットフォームでの -xarch の値 
    isa の値 意味
    generic

    ほとんどのシステムで良好なパフォーマンスを得られるようにコンパイルします。 これはデフォルトです。このオプションは、どのプロセッサでも大きくパフォーマンスを落とさず、またほとんどのプロセッサで良好なパフォーマンスを得られるような最良の命令セットを使用します。「最良な命令セット」の内容は、新しいリリースごとに調整される可能性があります。
    native 現在のシステムで良好なパフォーマンスを得られるようにコンパイルします。 これは -fast オプションのデフォルトです。現在コンパイラを実行しているシステムのプロセッサに最も適した設定を選択します。
    v7 SPARC-V7 ISA 用にコンパイルします。 V7 ISA 上で良好なパフォーマンスを得るためのコードを生成します。これは、V8 ISA 上で最良なパフォーマンスを得るための最良の命令セットと同じですが、整数の muldiv 命令、および fsmuld 命令は含まれていません。
    例: SPARCstation 1、SPARCstation 2
    v8a
    
    V8a 版の SPARC-V8 ISA 用にコンパイルします。 定義上、V8a は V8 ISA を意味します。ただし、fsmuld 命令は含まれていません。 V8a ISA 上で良好なパフォーマンスを得るためのコードを生成します。
    例: microSPARC I チップアーキテクチャに基づくすべてのシステム
    v8
    
    SPARC-V8 ISA 用にコンパイルします。 V8 アーキテクチャ上で良好なパフォーマンスを得るためのコードを生成します。
    例: SPARCstation 10
    v8plus
    
    V8plus 版の SPARC-V9 ISA 用にコンパイルします。 定義上、V8plus は V9 ISA を意味します。ただし、V8plus ISA 仕様で定義されている 32 ビットサブセットに限定されます。さらに、VIS (Visual Instruction Set) と実装に固有な ISA 拡張機能は含まれていません。

  • V8plus ISA 上で良好なパフォーマンスを得るためのコードを生成します。

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


    例: UltraSPARC チップアーキテクチャに基づくすべてのシステム
  • v8plusa
    
    V8plusa 版の SPARC-V9 ISA 用にコンパイルします。 定義上、V8plusa は V8plus アーキテクチャ + VIS (Visual Instruction Set) バージョン 1.0 + UltraSPARC 拡張機能を意味します。

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

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

    例: UltraSPARC チップアーキテクチャに基づくすべてのシステム
  • v8plusb
    
    UltraSPARC-III 拡張機能を持つ、V8plusb 版の SPARC-V8plus ISA 用にコンパイルします。 UltraSPARC アーキテクチャ + VIS (Visual Instruction Set) バージョン 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。

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

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

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

  • 生成される .o オブジェクトファイルは ELF64 形式です。このファイルは同じ形式の SPARC-V9 オブジェクトファイルとしかリンクできません。

  • 生成される実行可能ファイルは、64 ビット対応の Solaris オペレーティング環境が動作する、64 ビットカーネルを持つ UltraSPARC プロセッサ上でしか実行できません。

  • -xarch=v9 は、64 ビット対応の Solaris オペレーティング環境でコンパイルする場合にのみ使用できます。

  • v9a
    
    UltraSPARC 拡張機能を持つ SPARC-V9 ISA 用にコンパイルします。 SPARC-V9 ISA に VIS (Visual Instruction Set) と UltraSPARC プロセッサに固有の拡張機能を追加します。V9 SPARC アーキテクチャ上で良好なパフォーマンスを得るためのコードを生成します。

  • 生成される.o オブジェクトファイルは ELF64 形式です。このファイルは同じ形式の SPARC-V9 オブジェクトファイルとしかリンクできません。

  • 生成される実行可能ファイルは、64 ビット対応の Solaris オペレーティング環境が動作する、64 ビットカーネルを持つ UltraSPARC プロセッサ上でしか実行できません。

  • -xarch=v9a は、64 ビット対応 Solaris オペレーティング環境でコンパイルする場合にのみ使用できます。

  • v9b
    
    
    
    UltraSPARC-III 拡張機能を持つ SPARC-V9 ISA 用にコンパイルします。 V9a 版の SPARC-V9 ISA に UltraSPARC-III 拡張と VIS バージョン 2.0 を追加します。Solaris UltraSPARC-III 環境で良好なパフォーマンスを得るためのコードを生成します。

  • 生成される.o オブジェクトファイルは SPARC-V9 ELF64 形式です。このファイルは同じ形式の SPARC-V9 オブジェクトファイルとしかリンクできません。

  • 生成される実行可能ファイルは、64 ビット対応の Solaris オペレーティング環境が動作する、64 ビットカーネルを持つ UltraSPARC-III プロセッサ上でしか実行できません。

  • -xarch=v9b は、64 ビット対応の Solaris オペレーティング環境でコンパイルする場合にのみ使用できます。


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

    いずれの場合でも、初期のアーキテクチャでは、生成された実行可能ファイルの実行速度がかなり遅くなる可能性があります。また、4 倍精度 (REAL*16long double) の浮動小数点命令は多くの命令セットアーキテクチャで使用できますが、この命令はコンパイラが使用するコードには含まれません。

    IA プラットフォームの場合

    表 3-30 に、IA プラットフォームでの -xarch キーワードの詳細を示します。

    表 3-30   IA プラットフォームでの -xarch
    isa の値 意味
    generic
    
    ほとんどのシステムで良好なパフォーマンスを得られるようにコンパイルします。これはデフォルトです。このオプションは、どのプロセッサでも大きくパフォーマンスを落とさず、またほとんどのプロセッサで良好なパフォーマンスを得られるような最良の命令セットを使用します。「最良な命令セット」の内容は、新しいリリースごとに調整される可能性があります。
    386
    
    このリリースでは、generic386 は同じです。
    486
    
    Intel PentiumPro チップ用にコンパイルします。
    pentium
    
    このリリースでは、486pentium は同じです。
    pentium_pro
    
    このリリースでは、486pentium_pro は同じです。


    デフォルト

    -xarch=isa を指定しないと、-xarc=generic が使用されます。

    相互の関連性

    このオプションは単体でも使用できますが、-xtarget オプションの展開の一部でもあります。したがって、特定の -xtarget オプションによって設定された -xarch の値を変更するためにも使用できます。たとえば、-xtarget=ultra2 -xarch=v8 -xchip=ultra2 -xcache=15/32/1:512/64/1 に展開されます。次のコマンドでは、-xarch=v8plusb は、-xtarget=ultra2 の展開で設定された -xarch=v8 より優先されます。

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

    compat[=4] とともに -xarch=v9-xarch=v9a-xarch=v9b のいずれかを使用することはできません。

    警告

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

    -xcache=c

    (SPARC) オプティマイザで使用するキャッシュ属性を定義します。

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


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

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

    c の値 意味
    generic ほとんどの SPARC プロセッサで良好なパフォーマンスが得られるキャッシュ属性を定義します。
    s1/l1/a1 レベル 1 のキャッシュ属性を定義します。
    s1/l1/a1:s2/l2/a2 レベル 1 とレベル 2 のキャッシュ属性を定義します。
    s1/l1/a1:s2/l2/a2:s3/l3/a3 レベル 1、レベル 2、レベル 3 のキャッシュ属性を定義します。


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

    属性 定義
    si レベル i のデータキャッシュのサイズ (K バイト)
    li レベル i のデータキャッシュのラインサイズ (バイト)
    ai レベル i のデータキャッシュの結合規則


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

    デフォルト

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

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

    レベル 1 のキャッシュ レベル 2 のキャッシュ
    16K バイト
    ラインサイズ 32 バイト
    4 ウェイアソシアティブ
    1024K バイト
    ラインサイズ 32 バイト
    ダイレクトマッピング


    関連項目

    -xtarget=t

    -xcg89

    -xtarget=ss2 と同じです。

    警告

    コンパイルとリンクを別々に実行する場合で、コンパイルで -xcg89 を使用した場合は、リンクでも同じオプションを使用してください。そうしないと、予期しない結果が発生する可能性があります。

    -xcg92

    -xtarget=ss1000 と同じです。

    警告

    コンパイルとリンクを別々に実行する場合で、コンパイルで -xcg92 を使用した場合は、リンクでも同じオプションを使用してください。そうしないと、予期しない結果が発生する可能性があります。

    -xchip=c

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

    ターゲットとなるプロセッサを指定することによって、タイミング属性を指定します。

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

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

    表 3-31   -xchip オプション
    プラットフォーム c の値 意味
    SPARC generic SPARC プロセッサ上で良好なパフォーマンスを得るための、タイミング属性を使用します。
    SPARC old SuperSPARC チップより以前のプロセッサのタイミング属性を使用します。
    SPARC super SuperSPARC チップのタイミング属性を使用 します。
    SPARC super2 SuperSPARC II チップのタイミング属性を使用
    します。
    SPARC micro MicroSPARC チップのタイミング属性を使用
    します。
    SPARC micro2 MicroSPARC II チップのタイミング属性を使用
    します。
    SPARC hyper HyperSPARC チップのタイミング属性を使用
    します。
    SPARC hyper2 HyperSPARC II チップのタイミング属性を使用
    します。
    SPARC powerup Weitek PowerUp チップのタイミング属性を使用
    します。
    SPARC ultra UltraSPARC I チップのタイミング属性を使用
    します。
    SPARC ultra2 UltraSPARC II チップのタイミング属性を使用
    します。
    SPARC ultra2i UltraSPARC IIi チップのタイミング属性を使用
    します。
    SPARC ultra3 UltraSPARC III チップのタイミング属性を使用
    します。
    IA generic
    一般的な IA プロセッサが持つタイミング属性を使用します。
    IA 386 Intel 386 チップのタイミング属性を使用します。
    IA 486 Intel 486 チップのタイミング属性を使用します。
    IA pentium Intel Pentium チップのタイミング属性を使用
    します。
    IA pentium_pro Intel Pentium Pro チップのタイミング属性を使用
    します。


    デフォルト

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

    -xcode=a

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

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

    表 3-32   -xcode オプション
    a の値 意味
    abs32
    32 ビット絶対アドレスを生成します。高速ですが範囲が限定されます。コード + データ + bss サイズは 2**32 バイトに限定されます。
    abs44
    (SPARC) 44 ビット絶対アドレスを生成します。中程度の速さで中程度の範囲を使用できます。コード + データ + bss サイズは 2**44 バイトに限定され、64 ビットアーキテクチャ -xarch=(v9|v9a|v9b) でのみ使用可能です。
    abs64
    (SPARC) 64 ビット絶対アドレスを生成します。低速ですが全範囲を使用でき、64 ビットアーキテクチャ -xarch=(v9|v9a|v9b) でのみ使用可能です。
    pic13
    位置に依存しないコード (小規模モデル) を生成します。高速ですが範囲が限定されます。-Kpic と同等。32 ビットアーキテクチャでは最大 2**11 個の固有の外部シンボルを、64 ビットでは 2**10 個の固有の外部シンボルをそれぞれ参照できます。
    pic32
    位置に依存しないコード (大規模モデル) を生成します。低速ですが全範囲を使用できます。-KPIC と同等。32 ビットアーキテクチャでは最大 2**30 個の固有の外部シンボルを、64 ビットでは 2**29 個の固有の外部シンボルをそれぞれ参照できます。


    デフォルト

    SPARC V8 と V7 の場合は -xcode=abs32 です。

    SPARC と UltraSPARC (-xarc=(v9|v9a|v9b) のとき) の場合は -xcode=abs64 です。

    -xcrossfile[=n]

    (SPARC) 複数のソースファイルに渡る最適化とインライン化を可能にします。

    n には次のどちらかの値を指定します。

    n の値 意味
    0 複数のソースファイルに渡る最適化とインライン化を実行しません。
    1 複数のソースファイルに渡る最適化とインライン化を実行します。


    通常、コンパイラの解析の範囲は、コマンド行で指定した個々のファイルごとに行われます。たとえば、-xO4 オプションを指定した場合、自動インライン化は同じソースファイル内で定義および参照されているサブプログラムにのみ行われます。

    -xcrossfile または -xcrossfile=1 を指定すると、コンパイラはコマンド行で指定されたすべてのファイルを一括して分析し、それらが単一のソースファイルであるかのように扱います。

    デフォルト

    -xcrossfile を指定しない場合、-xcrossfile=0 が仮定され、複数のソースファイルに渡る最適化とインライン化は行われません。

    -xcrossfile-xcrossfile=1 と同じです。

    相互の関連性

    -xcrossfile オプションは、-xO4 または -xO5 と一緒に使用した場合にのみ効果が得られます。

    警告

    このオプションを使ってコンパイルされたファイルは、インライン化されたコードを含む可能性があるため、相互に依存しています。したがって、プログラムにリンクするときは、1 つの単位として使用しなければなりません。あるルーチンを変更したために、関連するファイルを再コンパイルした場合は、すべてのファイルを再コンパイルする必要があります。結果として、このオプションを使用すると、makefile の構成に影響を与えます。

    -xF

    この -xF オプションを指定してコンパイルした後で実行してアナライザを使用すると、最適化された関数の順序を示すマップファイルを作成できます。続いて実行するリンカーには、-Mmapfile (マップファイル) オプションでそのマップを使用するよう指示して、実行可能ファイルを作成することができます。これによって、実行可能ファイルの各関数が別々のセクションに置かれます。

    メモリー上でサブプログラムの順序を並べ替えることで効果が上がるのは、アプリケーション時間の多くの割合がアプリケーションテキストのページフォルト時間に費やされている場合だけです。それ以外の場合は、順序を変えてもアプリケーションの全体的なパフォーマンスが向上しないことがあります。

    相互の関連性

    -xF オプションは、-features=no%except (-noex) のときにだけ有効です。

    関連項目

    analyzer(1)、debugger(1)、および ld(1) のマニュアルページ

    -xhelp=flags

    各コンパイラオプションの簡単な説明を表示します。

    -xhelp=readme

    README (最新情報) ファイルの内容を表示します。

    README ファイルのページングには、環境変数 PAGER で指定されているコマンドが使用されます。PAGER が設定されていない場合、デフォルトのページングコマンド more が使用されます。

    -xildoff

    インクリメンタルリンカーを無効にします。

    デフォルト

    -g オプションを使用していない場合は、この -xildoff オプションがデフォルトになります。さらに -G オプションを使用しているか、コマンド行にソースファイルを指定している場合も、このオプションがデフォルトになります。このオプションを無効にするには、-xildon オプションを使用してください。

    関連項目

    -xildonild(1) および ld(1) のマニュアルページ、
    dbx コマンドによるデバッグ』

    -xildon

    インクリメンタルリンカーを有効にします。

    -G ではなく -g を使用し、コマンド行にソースファイルを指定していない場合は、このオプションが有効になります。このオプションを無効にするには、-xildoff オプションを使用してください。

    関連項目

    -xildoff と、ild(1) および ld(1) のマニュアルページ
    dbx コマンドによるデバッグ』

    -xlibmieee

    例外時に libm が数学ルーチンに対し IEEE 754 値を返します。

    libm のデフォルト動作は XPG に準拠します。

    関連項目

    『数値計算ガイド』

    -xlibmil

    選択された libm ライブラリルーチンを最適化のためにインライン展開します。


    注 - このオプションは C++ インライン関数には影響しません。

    一部の libm ライブラリルーチンにはインラインテンプレートがあります。このオプションを指定すると、これらのテンプレートが選択され、現在選択されている浮動小数点オプションとプラットフォームに対して最も高速な実行可能コードが生成されます。

    相互の関連性

    このオプションの機能は -fast オプションを指定した場合にも含まれます。

    関連項目

    -fast、『数値計算ガイド』

    -xlibmopt

    最適化された数学ルーチンのライブラリを使用します。

    パフォーマンスが最適化された数学ルーチンのライブラリを使用し、より高速で実行できるコードを生成します。通常の数学ライブラリを使用した場合とは、結果が少し異なることがあります。このような場合、異なる部分は通常は最後のビットです。

    このライブラリオプションをコマンド行に指定する順序は重要ではありません。

    相互の関連性

    -xlibmopt オプションの機能は -fast オプションを指定した場合にも含まれます。

    関連項目

    -fast、-xnolibmopt

    -xlic_lib=sunperf

    (SPARC) Sun Performance LibraryTM とリンクします。
    -l と同様、このオプションは、ソースまたはオブジェクトファイル名に続けて、コマンド行の最後に指定する必要があります。

    関連項目

    README ファイル『performance_library

    -xlicinfo

    ライセンスサーバー情報を表示します。

    このオプションは、ライセンスサーバー名と、検査済みのライセンスを所持するユーザーのユーザー ID を返します。このオプションを指定するとコンパイラは起動されず、ライセンスも検査されません。

    矛盾するオプションを使用すると、コマンド行の最後のものが優先され、警告が出されます。

    コンパイルせずにライセンス情報を表示します。

        example% CC -c -xlicinfo any.cc
    

    コンパイルしますが、ライセンス情報は表示しません。

        example% CC -xlicinfo -c any.cc
    

    -Xm

    -features=iddollar と同じです。

    -xM

    メークファイルの依存情報を出力します。

    プログラム foo.cc には次の文が含まれています。

    #include "foo.h"
    

    foo.c-xM でコンパイルすると、次の行が出力に含まれます。

    foo.o:foo.h
    

    関連項目

    メークファイルおよび依存関係についての詳細は、make(1) のマニュアルページを参照してください。

    -xM1

    依存情報を生成しますが、/usr/include は除きます。

    /usr/include ヘッダーファイルについての依存情報を出力しない点以外は、-xM オプションと同じ機能です。

    -xMerge

    (SPARC) データセグメントをテキストセグメントと併合 (マージ) します。

    オブジェクトファイルのデータは読み取り専用です。また、このデータは ld -N を指定してリンクしない限りプロセス間で共有されます。

    関連項目

    ld(1) のマニュアルページ

    -xnolib

    デフォルトのシステムライブラリとのリンクを無効にします。

    通常 (このオプションを指定しない場合)、C++ コンパイラは、C++ プログラムをサポートするためにいくつかのシステムライブラリとリンクします。このオプションを指定すると、デフォルトのシステムサポートライブラリとリンクするための -llib オプションが ld に渡されません。

    通常、コンパイラは、システムサポートライブラリにこの順序でリンクします。

    -l オプションの順序は重要です。-lm-lw-lcx オプションは -lc より前になければなりません。


    注 - -mt コンパイラオプションを指定した場合、コンパイラは通常 -lm でリンクする直前に -lthread でリンクします。

    デフォルトでどのシステムサポートライブラリがリンクされるかを知りたい場合は、コンパイルで -dryrum オプションを指定します。たとえば、次のコマンドを実行するとします 。

        example% CC foo.cc -xarch=v9 -dryrun
    

    上記の出力には次の行が含まれます。

    -lCstd -lCrun -lm -lw -lc 
    

    -xarch=v9 を指定したときは、-lcs がリンクされないことに注意してください。

    C アプリケーションのバイナリインタフェースを満たす最小限のコンパイルを行う場合、つまり、C サポートだけが必要な C++ プログラムの場合は、次のように指定します。

        example% CC -xnolib test.cc -lc
    

    一般的なアーキテクチャ命令を持つシングルスレッドアプリケーションに libm を静的にリンクするには、次のように指定します。

    標準モードの場合

        example% CC -xnolib test.cc -lCstd -lCrun \
        -Bstatic -lm -Bdynamic -lw -lcx -lc

    互換モードの場合

         example% CC -compat -xnolib test.cc -lC \
         -Bstatic -lm -Bdynamic -lw -lcx -lc

    相互の関連性

    -xarch=v9-xarch=v9a-xarch=v9b のいずれかでリンクする場合には、使用できない静的システムライブラリがあります (libm.alibc.a など)。

    -xnolib を指定する場合は、必要なすべてのシステムサポートライブラリを手動で一定の順序にリンクする必要があります。システムサポートライブラリは最後にリンクしなければなりません。

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

    警告

    C++ 言語の多くの機能では、libC (互換モード) または libCrun (標準モード) を使用する必要があります。

    このリリースのシステムサポートライブラリは安定していないため、リリースごとに変更される可能性があります。

    -lcx は 64 ビットコンパイルモードにはありません。

    関連項目

    -library-staticlib-l

    -xnolibmil

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

    最適化された数学ライブラリとのリンクを変更するには、このオプションを -fast と一緒に使用してください。

    -xnolibmopt

    数学ルーチンのライブラリを使用しないようにします。

    次の例のように、このオプションはコマンド行で -fast オプションを指定した場合は、その後に使用してください。

        example% CC -fast -xnolibmopt
    

    -xOlevel

    最適化レベルを指定します。一般的に、プログラムの実行速度は最適化のレベルに依存します。最適化レベルが高いほど、実行速度が速くなります。

    -xOlevel を指定しないと、非常に基本的なレベルの最適化しか行われません。つまり、最適化は、式の局所的な共通部分を削除することと、デッドコードを分析することに限定されます。最適化レベルを指定してコンパイルすると、プログラムのパフォーマンスが著しく向上することがあります。ほとんどのプログラムの場合、-xO2 (または同等のオプション -O および -O2) を使用することをお勧めします。

    一般に、プログラムをより高い最適化レベルでコンパイルすれば、実行時のパフォーマンスはそれだけ向上します。しかし、最適化レベルが高ければ、それだけコンパイル時間が増え、実行可能ファイルが大きくなる可能性があります。

    ごくまれに、-x02 の方が他の値より実行速度が速くなることがあり、-x03 の方が -x04 より速くなることがあります。すべてのレベルでコンパイルを行なってみて、こうしたことが発生するかどうか試してみてください。

    メモリー不足になった場合、オプティマイザは最適化レベルを落として現在の手続きをやり直すことによってメモリー不足を回復しようとします。ただし、以降の手続きについては、-xOlevel オプションで指定された最適化レベルを使用します。

    -xO には 5 つのレベルがあります。以降では各レベルが SPARC および IA プラットフォームでどのように動作するかを説明します。

    SPARC プラットフォームの場合

    このレベルでは、外部変数や間接変数の参照や定義は最適化されません。一般に、このレベルを使用するとコードサイズが最小になります。


    注 - -O-xO2 を指定することと同じです。

    IA プラットフォームの場合

    相互の関連性

    -g または -g0 を使用するとき、最適化レベルが -xO3 以下の場合、最大限のシンボリック情報とほぼ最高の最適化が得られます。末尾呼び出しの最適化とバックエンドのインライン化は無効です。

    -g または -g0 を使用するとき、最適化レベルが -xO4 以上の場合、最大限のシンボリック情報と最高の最適化が得られます。

    -g を指定してデバッグを行なっても -xOlevel には影響はありません。しかし、-xOlevel によって -g がある程度の制限を受けます。たとえば、-xOlevel オプションを使用すると、dbx から渡された変数を表示できないなど、デバッグの機能が一部制限されます。しかし、dbx where コマンドを使用して、シンボリックトレースバックを表示することは可能です。詳細は、『dbx コマンドによるデバッグ』を参照してください。

    -xcrossfile オプションは、-xO4 または -xO5 と一緒に使用した場合にのみ効果があります。

    警告

    大規模な手続き (数千行のコードからなる手続き) に対して -xO3 または -xO4 を指定して最適化をすると、途方もない大きさのメモリーが必要になり、マシンのパフォーマンスが低下することがあります。

    こうしたパフォーマンスの低下を防ぐには、limit コマンドを使用して、1 つのプロセスで使用できる仮想メモリーの大きさを制限します (csh(1) のマニュアルページを参照)。たとえば、使用できる仮想メモリーを 16M バイトに制限するには、次のコマンドを使用します。

        example% limit datasize 16M
    

    このコマンドにより、データ領域が 16M バイトに達したときに、オプティマイザがメモリー不足を回復しようとします。

    マシンが使用できるスワップ領域の合計容量を超える値は、制限値として指定することはできません。制限値は、大規模なコンパイル中でもマシンの通常の使用ができるぐらいの大きさにしてください。

    最良のデータサイズ設定値は、要求する最適化のレベルと実メモリーの量、仮想メモリーの量によって異なります。

    実際のスワップ空間に関する情報を得るには、swap -l と入力します。

    実際の実メモリーに関する情報を得るには、dmesg | grep mem と入力します。

    関連項目

    -fast-xcrossfile=n-xprofile=pcsh(1) のマニュアルページ

    -xpg

    -xpg オプションでは、gprof で自動プロファイル処理するためのデータを収集するコードが生成されます。このオプションを指定すると、プログラムが正常に終了したときに gmon.out を生成する実行時記録メカニズムが呼び出されます。

    警告

    コンパイルとリンクを別々に行う場合は、-xpg でコンパイルしたときは -xpg でリンクする必要があります。

    関連項目

    -xprofile=panalyzer(1) のマニュアルページ、
    『プログラムのパフォーマンス解析』

    -xprefetch[=a[,a]]

    (SPARC) 先読み機能をサポートするアーキテクチャで先読み命令を有効にします。たとえば、UltraSPARC-II (-xarch=v8plusv8plusav8plusbv9v9av9b のいずれか) の場合です。

    a は次のどれかです。

    意味
    auto 先読み命令の自動的な生成を有効にします。
    no%auto 先読み命令の自動的な生成を無効にします。
    explicit 明示的な先読みマクロを有効にします。
    no%explicit 明示的な先読みマクロを無効にします。
    yes -xprefetch=yes-xprefetch=auto,explicit と同じです。
    no -xprefetch=no-xprefetch=no%auto,no%explicit と同じです。


    デフォルト

    -xprefetch を指定しないと、-xprefetch=no%auto,explicit が使用されます。

    -xprefetch だけを指定すると、-xprefetch=auto,explicit が使用されます。

    -xprefetch だけを指定した場合や引数として auto または yes を指定した場合以外は、デフォルトで no%auto が使用されます。たとえば、-xprefetch=explicit-xprefetch=explicit,no%auto と同じことです。

    no%explicitno を指定した場合以外は、デフォルトで explicit が使用されます。たとえば、-xprefetch=auto-xprefetch=auto,explicit と同じことです。

    相互の関連性

    sun_prefetch.h ヘッダーファイルには、明示的な先読み命令を指定するためのマクロが含まれています。先読み命令は、実行コード中のマクロの位置にほぼ相当するところに挿入されます。

    明示的な先読み命令を使用するには、使用するアーキテクチャが適切なもので、sun_prefetch.h をインクルードし、かつ、コンパイラコマンドに -xprefetch が指定されていないか、-xprefetch=explict-xprefetch=yes が指定されていなければなりません。

    マクロが呼び出され、sun_prefetch.h ヘッダーファイルがインクルードされていても、-xprefetch=no%explict-xprefetch=no が指定されていると、明示的な先読み命令は実行コードに組み込まれません。

    -xprefetch-xprefetch=auto-xprefetch=yes の場合には、コンパイラは生成するコードに先読み命令を自動的に挿入します。これにより、先読みをサポートするアーキテクチャではパフォーマンスが向上する場合があります。

    警告

    明示的な先読み命令の使用は、パフォーマンスが実際に向上する特別な場合に限定してください。

    -xprofile=p

    実行時プロファイルデータを収集したり、それを使って最適化します。

    このオプションを使用すると、実行頻度のデータが集められて、実行時に保存されます。保存されたデータは後続する処理の実行時に使用され、これによってパフォーマンスが向上します。このオプションは、最適化のレベルが指定されている場合にのみ有効です。

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

    表 3-33   -xprofile オプション 
    p の値 意味
    collect[:name]
    実行頻度のデータを集めて保存します。後に -xprofile=use を指定した場合にオプティマイザがこれを使用します。コンパイラは、コードを生成して実行頻度を計ります。name には分析するプログラム名を指定します。name は省略可能です。指定しなかった場合、a.out と仮定されます。
    -xprofile=collect:name でコンパイルしたプログラムは、実行時に、実行時のフィードバック情報を書き込むサブディレクトリ name.profile を作成します。データは、このサブディレクトリのファイル feedback に書き込まれます。プログラムを繰り返し実行すると、実行頻度のデータが feedback ファイルに累積されます。つまり、前の実行で出力されたデータはなくなりません。
    use[:name] 有効な最適化を行うために実行頻度データを使います。name には分析する実行可能ファイル名を指定します。name は省略可能で、省略すると実行可能ファイル名は a.out とみなされます。
    プログラムは、前の実行で feedback ファイルに生成され、保存された実行頻度データを使って最適化されます。このファイルは、-xprofile=collect でコンパイルしたプログラムを前に実行したときに書き込まれたものです。
    ソースファイルと他のコンパイラオプションは、feedback ファイルを生成したコンパイル済みプログラムをコンパイルしたときとまったく同じでなければなりません。
    -xprofile=collect:name でコンパイルしたのであれば、同じプログラム名 name を最適化コンパイルの -xprofile=use:name にも指定しなければなりません。
    tcov 「新しい」形式の tcov を使った基本ブロックカバレージ解析。
    tcov の基本ブロックプロファイルの新しい形式です。-xa オプションと類似した機能を持つが、ヘッダーファイルにソースコードが含まれているプログラムや、C++ テンプレートを使用するプログラムのデータを集めます。コード生成は -xa オプションと類似していますが、.d ファイルは生成されません。その代わりにファイルが 1 つ生成されます。このファイルの名前は最終的な実行可能ファイルに基づきます。たとえば、 /foo/bar にある myprog を実行する場合、データファイルは /foo/bar/myprog.profile/tcovd に保存されます。
    tcov を実行する場合は、新しい形式のデータが使用されるように
    -x オプションを指定します。-x オプションを指定しないと、デフォルトで古い形式の .d ファイルが使用され、予期しない結果が出力されます。
    -xa オプションとは異なり、TCOVDIR 環境変数はコンパイル時間には影響しません。ただし、TCOVDIR 環境変数の値はプログラムの実行時に使用されます。


    相互の関連性

    -xprofile=tcov オプションと -xa オプションは、1 つの実行可能ファイルで同時に使用できます。つまり、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルからなるプログラムをリンクすることはできますが、両方のオプションを使って 1 つのファイルをコンパイルすることはできません。

    -xO4 を使用したために、関数のインライン化が行われている場合は、-xprofile=tcov によって生成されたコードカバレージ報告は信用できない可能性があります。

    警告

    コンパイルとリンクを別々に実行する場合で、コンパイルで -xprofile オプションを使用した場合は、リンクでも -xprofile を使用する必要があります。

    関連項目

    -xatcov(1) のマニュアルページ
    『プログラムのパフォーマンス解析』

    -xregs=r[,...r]

    (SPARC) 一時レジスタの使用を制御します。

    コンパイラは、一時記憶領域として使用できるレジスタ (一時レジスタ) が多ければ、それだけ高速なコードを生成します。このオプションは、利用できる一時レジスタを増やしますが、必ずしもそれが適切であるとは限りません。

    r には次の値のいずれかを指定します。各値の意味は -xarch の設定によって異なります。

    r の値 内容
    [no%]appl
    V8 および V8a の場合、レジスタ %g2、%g3、%g4 の使用を許可します [しません]。 v8plusv8plusa、および v8plusb の場合、レジスタ g2、g3、g4、g5 の使用を許可します [しません]。 V9V9a、および v9b の場合、レジスタ %g2 と %g3 の使用を許可します [しません]。
    SPARC ABI では、これらのレジスタはアプリケーションレジスタと記述されています。これらのレジスタを使用すると、必要な loadstore 命令が少なくなるため、パフォーマンスが向上します。ただし、これらのレジスタの使用は、他の目的でレジスタを使用するプログラムとの矛盾を起こすことがあります。
    [no%]float
    SPARC ABI で指定されているように、浮動小数点レジスタの使用を許可します [しません]。 プログラム中に浮動小数点コードが含まれていない場合でも、これらのレジスタを使用できます。 浮動小数点コードが含まれているソースプログラムには、このオプションを使用できません。


    デフォルト

    -xregs を指定しないと、-xregs=appl,float が使用されます。

    使用可能なすべての一時レジスタを使ってアプリケーションプログラムをコンパイルするには、次のように指定します。

    -xregs=appl,float

    コンテキストの切り替えの影響を受けやすい非浮動小数点コードをコンパイルするには、次のように指定します。

    -xregs=no%appl, no%float

    関連項目

    SPARC V7 および V8 の ABI、SPARC V9 の ABI

    -xs

    オブジェクト (.o) ファイルなしに dbx でデバッグできるようにします。

    -xs オプションは、dbx の自動読み込みを無効にします。このオプションは、.o ファイルを残しておくことができない場合に使用してください。このオプションにより、
    -s オプションがアセンブラに渡されます。

    「非自動読み込み」とは、シンボルテーブルの古い読み込み方法です。dbx の全シンボルテーブルが実行ファイル内に置かれます。また、リンカーによるリンクや dbx による初期化の速度が遅くなります。

    「自動読み込み」は、シンボルテーブルの新しい読み込み方法 (デフォルト) です。各 .o ファイルに情報が含まれるため、dbx はシンボルテーブルが必要な場合にのみシンボルテーブル情報を読み込みます。このため、リンカーによるリンクや dbx による初期化の速度が速くなります。

    -xs を指定する場合で、実行ファイルを別のディレクトリに移動して dbx を使用するときは、オブジェクト (.o) ファイルを移動する必要はありません。

    -xs を指定せずに実行ファイルを別のディレクトリに移動して dbx を使用する場合は、ソースファイルとオブジェクト (.o) ファイルの両方を移動する必要があります。

    -xsafe=mem

    (SPARC) メモリーに関するトラップを発生させません。

    このオプションによって、V9 マシン上で投機的なロード命令を使用することができます。

    相互の関連性

    このオプションは、-xarchv8plusv8plusav8plusbv9v9av9b のいずれかを指定し、最適化レベルの -x05 と組み合わせた場合にだけ有効です。

    警告

    このオプションは、プログラムでメモリーに関するトラップが起こらないとみなせる場合しか使用しないでください。ほとんどのプログラムの場合、この仮定は適切であり、このように仮定してもかまいません。しかし、メモリーに関するトラップを明示的に強制して例外条件を処理するプログラムの場合は、このように仮定することはできません。

    -xsb

    WorkShop ソースブラウザ用の情報を生成します。

    このオプションを指定すると、CC ドライバが、ソースブラウザのために SunWS_cache サブディレクトリにシンボルテーブル情報を追加生成します。

    関連項目

    -xsbfast

    -xsbfast

    ソースブラウザ情報を生成するだけで、コンパイルはしません。

    このオプションでは、ccfe 段階だけを実行して、ソースブラウザのために SunWS_cache サブディレクトリにシンボルテーブル情報を追加生成します。オブジェクトファイルは生成されません。

    関連項目

    -xsb

    -xspace

    (SPARC) コードサイズが大きくなるような最適化は行いません。

    -xtarget=t

    命令セットと最適化処理の対象システムを指定します。

    コンパイラにハードウェアシステムを正確に指定すると、プログラムによってはパフォーマンスが向上します。プログラムのパフォーマンスを重視する場合は、ハードウェアを適切に指定することが極めて重要です。特に、プログラムをより新しい SPARC システム上で実行する場合には重要になります。しかし、ほとんどのプログラムおよび旧式の SPARC システムではパフォーマンスの向上はわずかであるため、汎用的な指定方法で十分です。

    SPARC プラットフォームの場合

    SPARC プラットフォームでは、t には次のいずれかの値を指定します。

    t の値 意味
    native ホストシステムで最高のパフォーマンスが得られます。
    コンパイラは、ホストシステム用に最適化されたコードを生成し、コンパイラが動作しているマシンで使用できるアーキテクチャ、チップ、キャッシュの属性を決定します。
    generic 汎用アーキテクチャ、チップ、キャッシュで最高のパフォーマンスが得られます。 コンパイラは、-xtarget=generic-xarch=generic
    -xchip=generic -xcache=generic
    に展開します。 これはデフォルト値です。
    platform-name 指定するシステムで最高のパフォーマンスが得られます。 表 3-6 から SPARC プラットフォームの名前を選択します。


    次の表は、-xtarget に指定できる SPARC プラットフォームの名前とその展開値を示しています。

    表 3-34   -xtarget の SPARC プラットフォーム名  
    -xtarget -xarch -xchip -xcache
    generic generic generic generic
    cs6400 v8 super 16/32/4:2048/64/1
    entr150 v8 ultra 16/32/1:512/64/1
    entr2 v8 ultra 16/32/1:512/64/1
    entr2/1170 v8 ultra 16/32/1:512/64/1
    entr2/1200 v8 ultra 16/32/1:512/64/1
    entr2/2170 v8 ultra 16/32/1:512/64/1
    entr2/2200 v8 ultra 16/32/1:512/64/1
    entr3000 v8 ultra 16/32/1:512/64/1
    entr4000 v8 ultra 16/32/1:512/64/1
    entr5000 v8 ultra 16/32/1:512/64/1
    entr6000 v8 ultra 16/32/1:512/64/1
    sc2000 v8 super 16/32/4:2048/64/1
    solb5 v7 old 128/32/1
    solb6 v8 super 16/32/4:1024/32/1
    ss1 v7 old 64/16/1
    ss10 v8 super 16/32/4
    ss10/20 v8 super 16/32/4
    ss10/30 v8 super 16/32/4
    ss10/40 v8 super 16/32/4
    ss10/402 v8 super 16/32/4
    ss10/41 v8 super 16/32/4:1024/32/1
    ss10/412 v8 super 16/32/4:1024/32/1
    ss10/50 v8 super 16/32/4
    ss10/51 v8 super 16/32/4:1024/32/1
    ss10/512 v8 super 16/32/4:1024/32/1
    ss10/514 v8 super 16/32/4:1024/32/1
    ss10/61 v8 super 16/32/4:1024/32/1
    ss10/612 v8 super 16/32/4:1024/32/1
    ss10/71 v8 super2 16/32/4:1024/32/1
    ss10/712 v8 super2 16/32/4:1024/32/1
    ss10/hs11 v8 hyper 256/64/1
    ss10/hs12 v8 hyper 256/64/1
    ss10/hs14 v8 hyper 256/64/1
    ss10/hs21 v8 hyper 256/64/1
    ss10/hs22 v8 hyper 256/64/1
    ss1000 v8 super 16/32/4:1024/32/1
    ss1plus v7 old 64/16/1
    ss2 v7 old 64/32/1
    ss20 v8 super 16/32/4:1024/32/1
    ss20/151 v8 hyper 512/64/1
    ss20/152 v8 hyper 512/64/1
    ss20/50 v8 super 16/32/4
    ss20/502 v8 super 16/32/4
    ss20/51 v8 super 16/32/4:1024/32/1
    ss20/512 v8 super 16/32/4:1024/32/1
    ss20/514 v8 super 16/32/4:1024/32/1
    ss20/61 v8 super 16/32/4:1024/32/1
    ss20/612 v8 super 16/32/4:1024/32/1
    ss20/71 v8 super2 16/32/4:1024/32/1
    ss20/712 v8 super2 16/32/4:1024/32/1
    ss20/hs11 v8 hyper 256/64/1
    ss20/hs12 v8 hyper 256/64/1
    ss20/hs14 v8 hyper 256/64/1
    ss20/hs21 v8 hyper 256/64/1
    ss20/hs22 v8 hyper 256/64/1
    ss2p v7 powerup 64/32/1
    ss4 v8a micro2 8/16/1
    ss4/110 v8a micro2 8/16/1
    ss4/85 v8a micro2 8/16/1
    ss5 v8a micro2 8/16/1
    ss5/110 v8a micro2 8/16/1
    ss5/85 v8a micro2 8/16/1
    ss600/120 v7 old 64/32/1
    ss600/140 v7 old 64/32/1
    ss600/41 v8 super 16/32/4:1024/32/1
    ss600/412 v8 super 16/32/4:1024/32/1
    ss600/51 v8 super 16/32/4:1024/32/1
    ss600/512 v8 super 16/32/4:1024/32/1
    ss600/514 v8 super 16/32/4:1024/32/1
    ss600/61 v8 super 16/32/4:1024/32/1
    ss600/612 v8 super 16/32/4:1024/32/1
    sselc v7 old 64/32/1
    ssipc v7 old 64/16/1
    ssipx v7 old 64/32/1
    sslc v8a micro 2/16/1
    sslt v7 old 64/32/1
    sslx v8a micro 2/16/1
    sslx2 v8a micro2 8/16/1
    ssslc v7 old 64/16/1
    ssvyger v8a micro2 8/16/1
    sun4/110 v7 old 2/16/1
    sun4/15 v8a micro 2/16/1
    sun4/150 v7 old 2/16/1
    sun4/20 v7 old 64/16/1
    sun4/25 v7 old 64/32/1
    sun4/260 v7 old 128/16/1
    sun4/280 v7 old 128/16/1
    sun4/30 v8a micro 2/16/1
    sun4/330 v7 old 128/16/1
    sun4/370 v7 old 128/16/1
    sun4/390 v7 old 128/16/1
    sun4/40 v7 old 64/16/1
    sun4/470 v7 old 128/32/1
    sun4/490 v7 old 128/32/1
    sun4/50 v7 old 64/32/1
    sun4/60 v7 old 64/16/1
    sun4/630 v7 old 64/32/1
    sun4/65 v7 old 64/16/1
    sun4/670 v7 old 64/32/1
    sun4/690 v7 old 64/32/1
    sun4/75 v7 old 64/32/1
    ultra v8 ultra 16/32/1:512/64/1
    ultra1/140 v8 ultra 16/32/1:512/64/1
    ultra1/170 v8 ultra 16/32/1:512/64/1
    ultra1/200 v8 ultra 16/32/1:512/64/1
    ultra2 v8 ultra2 16/32/1:512/64/1
    ultra2/1170 v8 ultra 16/32/1:512/64/1
    ultra2/1200 v8 ultra 16/32/1:1024/64/1
    ultra2/1300 v8 ultra2 16/32/1:2048/64/1
    ultra2/2170 v8 ultra 16/32/1:512/64/1
    ultra2/2200 v8 ultra 16/32/1:1024/64/1
    ultra2/2300 v8 ultra2 16/32/1:2048/64/1
    ultra2i v8 ultra2i 16/32/1:512/64/1
    ultra3 v8 ultra3 64/32/4:8192/256/1


    IA プラットフォームの場合

    IA の場合は、-xtarget に次の値を指定できます。

    デフォルト

    SPARC でも IA でも、-xtarget を指定しないと、-xtarget=generic が使用されます。

    展開

    -xtarget オプションは、購入したプラットフォーム上で使用する -xarch-xchip-xcache の組み合わせを簡単に指定するためのマクロです。-xtarget 自体の意味は、展開することです。

    -xtarget=sun4/15-xarch=v8a -xchip=micro -xcache=2/16/1 を意味します。

    相互の関連性

    -xarch=v9|v9a|v9b オプションを指定して SPARC V9 アーキテクチャ用にコンパイルする場合、-xtarget=ultra または ultra2 の指定は必要でないか、十分ではありません。-xtarget を指定する場合は、-xarch=v9|v9a|v9b オプションは -xtarget よりも後になければなりません。たとえば、次のように指定するとします。

    -xarch=v9 -xtarget=ultra
    

    上記の指定は次のように展開され、-xarch の値が v8 に戻ります。

    -xarch=v9 -xarch=v8 -xchip=ultra -xcache=16/32/1:512/64/1
    

    正しくは、次のように、-xarch-xtarget よりも後に指定します。

    -xtarget=ultra -xarch=v9
    

    -xtime

    CC ドライバが、さまざまなコンパイル過程の実行時間を報告します。

    -xunroll=n

    可能な場合は、ループを展開します。

    このオプションでは、コンパイラがループを最適化 (展開) するかどうかを指定します。

    n が 1 の場合、コンパイラはループを展開しません。

    n が 1 より大きな整数の場合は、-unroll=n によってコンパイラがループを n 回展開します。

    -xvector[=(yes|no)]

    (SPARC) SPARC ベクトルライブラリ関数の自動呼び出しを有効にします。

    デフォルト

    コンパイラのデフォルトは -xvector=no です。-xvector だけを指定した場合、-xvector=yes が仮定されます。

    警告

    コンパイルとリンクを別々に行う場合は、どちらにも同じ -xvector 設定を使用する必要があります。

    -xwe

    ゼロ以外の終了状態を返すことによって、すべての警告をエラーとして扱います。

    -z arg

    リンクエディタのオプション。詳細は、ld(1) のマニュアルページと Solaris 関連のマニュアル『リンカーとライブラリ』を参照してください。

    -ztext

    書き込み不可で割り当て可能なセクションに対して再配置が残っている場合に、致命的エラーとします。

    このオプションはリンカーに渡されます。


    サン・マイクロシステムズ株式会社
    Copyright information. All rights reserved.
    ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引