この節では、Sun Studio 12 C++ 5.9 コンパイラで導入された新機能を簡単に説明します。各項目に記されている参照先に詳しい説明があります。
C コンパイラは次の Linux ディストリビューション (x86 および x64) で使用できます。
SUSE Linux Enterprise Server 9 Service Pack 3 以降。
Red Hat Enterprise Linux 4。
2.6 カーネルに基づいた、その他の Linux ディストリビューション (正式サポートなし)。
メモリーモデルを指定する新しい -m32|-m64 オプション。
旧式のフラグを置き換える -xarch の新しいフラグ。
UltraSPARC T2 および SPARC64vi プロセッサのコード生成を提供する -xtarget および -xchip の新しい値。
Fused Multiply-Add 命令をサポートしているプロセッサで、この命令の生成を有効にする新しいフラグ -fma=fused。
x86 および SPARC プラットフォームで対応している明示的な先読みマクロ (-xprefetch=explicit)
このリリースでは、32 ビットまたは 64 ビットバイナリのコンパイルを指定する方法が変更されました。「A.2.107 -xarch=isa」オプションは、暗黙的なメモリーモデル (32 ビット ILP32 または 64 ビット LP64 のそれぞれの定義) で使用できなくなりました。現在は、対象プロセッサの命令セットの指定のみに使用します。
新しい 「A.2.50 -m32|-m64」オプションを使用して、対象コンパイルのメモリーモデルを指定します。
C 言語の int、long、およびポインタデータ型を指定する ILP32 モデルは、すべて 32 ビット拡張です。long およびポインタデータ型を指定する LP64 モデルは、すべて 64 ビット拡張です。Solaris および Linux OS は、LP64 メモリーモデルの大きなファイルや配列もサポートします。
-m64 を使用してコンパイルを行う場合、結果の実行可能ファイルは、64 ビットカーネルを実行する Solaris OS または Linux OS の 64 ビット UltraSPARC(R) または x86 プロセッサでのみ動作します。コンパイル、リンク、および 64 ビットオブジェクトの実行は、64 ビット実行をサポートする Solaris または Linux OS でのみ行うことができます。
x86 Solaris プラットフォーム用にコンパイルを行う場合に注意が必要な、重要な事項がいくつかあります。
従来の Sun 仕様の並列化プログラムは、x86 では使用できません。代わりに OpenMP を使用してください。従来の並列化命令を OpenMP に変換する方法については、『Sun Studio 12: OpenMP API User’s Guide』を参照してください。
-xarch を sse、sse2、sse2a、または sse3 に設定してコンパイルしたプログラムは、必ずこれらの拡張と機能を提供するプラットフォームでのみ実行してください。
Solaris 9 4/04 以降の Solaris OS リリースは、Pentium 4 互換プラットフォームでは SSE/SSE2 に対応しています。これより前のバージョンの Solaris OS は SSE/SSE2 に対応していません。-xarch で選択した命令セットが、実行中の Solaris OS で有効ではない場合、コンパイラはその命令セットのコードを生成またはリンクできません。
コンパイルとリンクを個別に行う場合は、必ずコンパイラを使ってリンクし、同じ -xarch 設定で正しい起動ルーチンがリンクされるようにしてください。
x86 の 80 ビット浮動小数点レジスタが原因で、x86 での演算結果が SPARC の結果と異なる場合があります。この差を最小にするには、-fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。
Solaris と Linux でも、固有の数学ライブラリ (たとえば、sin(x)) が同じではないため、演算結果が異なることがあります。
Sun Studio 11 と Solaris 10 OS から、これらの特殊化された -xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。
Solaris 10 以前のシステムでは妥当性検査が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。
これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。
このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、および SSE3 の命令と拡張機能を利用している __asm アセンブラコードにも当てはまります。
この C++ コンパイラ (CC) は、『ISO International Standard for C++, ISO IS 14882:1998, Programming Language - C++』に準拠しています。このリリースに含まれる README (最新情報) ファイルには、この規格の仕様と異なる記述が含まれています。
SPARCTM プラットフォームでは、このコンパイラは、UltraSPARCTM の実装と SPARC V8 と SPARC V9 の「最適化活用」機能をサポートします。これらの機能は、Prentice-Hall から出版された SPARC International による『SPARC アーキテクチャ・マニュアル バージョン 8 』(トッパン刊) と『SPARC ArchitectureManual, Version 9』(ISBN 0-13-099227-5) (英語版のみ)に定義されています。
このマニュアルでは、「標準」は、前述の規格の各バージョンに準拠していることを意味します。「非標準 」および「拡張」は、これらの規格のバージョンに準拠しない機能のことを指します。
これらの標準は、それぞれの標準を策定する組織によって改訂されることがあります。したがって、コンパイラが準拠するバージョンの規格が改定されたり、完全に書き換えられた場合、機能によっては、Sun C++ コンパイラの将来のリリースで前のリリースと互換性がなくなる場合があります。
C++ コンパイラの README ファイルでは、コンパイラに関する重要な情報を取り上げています。 これらの情報は次のとおりです。
マニュアルの印刷後に判明した情報
新規および変更された機能
ソフトウェアの非互換性
問題および解決方法
制限および互換性の問題
出荷可能なライブラリ
実装されていない規格
C++ README ファイルのテキスト版を表示するには、コマンドプロンプトで次のコマンドを入力してください。
example% CC -xhelp=readme |
HTML 版の README を参照するには、Netscape Communicator 4.0 またはそれと互換性のあるブラウザで、次のファイルを開きます。
/opt/SUNWspro/docs/ja/index.html
C++ コンパイラソフトウェアが /opt ディレクトリにインストールされていない場合、システム管理者に実際のパスをお尋ねください。ブラウザは HTML 文書の一覧を表示します。README を開くには、一覧の上の対応するタイトルをクリックします。
オンラインのマニュアルページ (man) では、コマンドや関数、サブルーチン、およびその機能に関する情報を簡単に参照できます。
マニュアルページを表示するには、次のように入力してください。
example% man topic |
C ++ のマニュアル全体を通して、マニュアルページのリファレンスは、トピック名とマニュアルのセクション番号で表示されます。CC(1) を表示するには、man CC と入力 します。たとえば ieee_flags(3M) など、ほかのセクションを表示するには、man コマンドに -s オプションを使用します。
example% man -s 3M ieee_flags |
次の C++ ユーティリティーは従来の UNIX® ツールに統合され、UNIX オペレーティングシステムに付属しています。
lex - テキストの単純な字句解析に使用するプログラムを生成する。
yacc - 構文に応じて入力ストリームを解析するための C 関数を生成する。
prof - プログラム内のモジュールの実行プロファイルを作成する。
gprof - プログラムの実行時パフォーマンスについての手続き単位のプロファイル。
tcov - プログラムの実行時パフォーマンスについての文単位のプロファイル。
これら UNIX ツールについての詳細は、『プログラムのパフォーマンス解析』や関連するマニュアルページを参照してください。
このリリースの C++ では、英語以外の言語を使用したアプリケーションの開発をサポートしています。 対象としている言語は、ヨーロッパのほとんどの言語と日本語です。このため、アプリケーションをある言語から別の言語に簡単に置き換えることができます。この機能を国際化と呼びます。
通常 C++ コンパイラでは、次のように国際化を行なっています。
どの国のキーボードから入力された ASCII 文字でも認識する。つまりキーボードに依存せず、8 ビット透過となっています。
メッセージによっては現地語で出力できるものもある。
注釈、文字列、データに、現地語の文字を使用できる。
C++ は、Extended UNIX Character (EUC) 準拠の文字セットをサポートしています。 この文字セットでは、文字列中のすべての NULL バイトが NULL 文字になります。 また、文字列中で ASCII 値が '/' のバイトはすべて '/' 文字になります。
変数名は国際化できません。 必ず英語の文字を使用してください。
アプリケーションをある国の言語から別の国の言語に変更するには、ロケールを設定します。言語の切り換えのサポートに関する情報については、オペレーティングシステムのマニュアルを参照してください。
この章では、C++ コンパイラの使用方法を説明します。
コンパイラの主な目的は、C++ などの高水準言語で書かれたプログラムをコンピュータハードウェアで実行できるデータファイルに変換することです。C++ コンパイラでは次のことができます。
ソースファイルを再配置可能なバイナリ (.o) ファイルに変換する。これらのファイルはそのあと、実行可能ファイル、(-xar オプションで) 静的 (アーカイブ) ライブラリ (.a) ファイル、動的 (共有) ライブラリ (.so) ファイルなどにリンクされます。
オブジェクトファイルとライブラリファイルのどちらか (または両方) をリンク (または再リンク) して実行可能ファイルを作成する。
実行時デバッグを (-g オプションで) 有効にして、実行可能ファイルをコンパイルする。
文レベルや手続きレベルの実行時プロファイルを (-pg オプションで) 有効にして、実行可能ファイルをコンパイルする。
この節では、C++ コンパイラを使って C++ プログラムのコンパイルと実行をどのように行うかを簡単に説明します。コマンド行オプションの詳しい説明については、「16.8 dlopen を使って C プログラムから C++ ライブラリにアクセスする」を参照してください。
この章のコマンド行の例は、CC の使用方法を示すためのものです。実際に出力される内容はこれと多少異なる場合があります。
C++ アプリケーションを構築して実行するには、基本的に次の手順が必要です。
エディタで C++ ソースファイルを作成する。このソースファイルには、表 2–1 に列挙されている接尾辞のいずれかを使用します。
コンパイラを起動して実行可能ファイルを作成する。
実行可能ファイルの名前を入力してプログラムを実行する。
次のプログラムは、メッセージを画面に表示する例です。
example% cat greetings.cc #include <iostream> int main() { std::cout << "Real programmers write C++!" << std::endl; return 0; } example% CC greetings.cc example% a.out Real programmers write C++! example% |
この例では、ソースファイル greetings.cc を CC でコンパイルしています。デフォルトでは、実行可能ファイルがファイル a.out として作成されます。プログラムを起動するには、コマンドプロンプトで実行可能ファイル名 a.out を入力します。
従来、UNIX コンパイラは実行可能ファイルに a.out という名前を付けていました。しかし、すべてのコンパイルで同じファイルを使用するのは不都合な場合があります。そのファイルがすでにあれば、コンパイラを実行したときに上書きされてしまうからです。次の例のように、コンパイラオプションに -o を使用すれば、実行可能出力ファイルの名前を指定できます。
example% CC– o greetings greetings.cc |
この例では、-o オプションを指定することによって、実行可能なコードがファイル greetings に書き込まれます。プログラムにソースファイルが 1 つだけしかない場合は、ソースファイル名から接尾辞を除いたものをそのプログラム名にすることが一般的です。
あるいは、コンパイルのあとに mv コマンドを使って、デフォルトの a.out ファイルを別の名前に変更することもできます。いずれの場合も、プログラムを実行するには、実行可能ファイルの名前を入力します。
example% greetings Real programmers write C++! example% |
このあとの節では、CC コマンドで使用する規約、コンパイラのソース行指令など、コンパイラの使用に関連する内容について説明します。
CC [options] [source-files] [object-files] [libraries] |
options は、先頭にダッシュ (-) またはプラス記号 (+) の付いたキーワード (オプション) です。このオプションには、引数をとるものがあります。
通常、コンパイラオプションの処理は、左から右へと行われ、マクロオプション (ほかのオプションを含むオプション) は、条件に応じて内容が変更されます。ほとんどの場合、同じオプションを 2 回以上指定すると、最後に指定したものだけが有効になり、オプションの累積は行われません。次の点に注意してください。
すべてのリンカーオプション、ならびに -features、-I、l、L、-library、-pti、-R、-staticlib、-U、-verbose および -xprefetch オプションで指定した内容は蓄積され、上書きはされません。
-U オプションは、すべて -D オプションのあとに処理されます。
ソースファイル、オブジェクトファイル、およびライブラリは、コマンド行に指定した順にコンパイルとリンクが行われます。
次の例では、CC を使って 2 つのソースファイル (growth.C と fft.C) をコンパイルし、実行時デバッグを有効にして growth という名前の実行可能ファイルを作成します。
example% CC -g -o growth growth.C fft.C |
コンパイラがコマンド行に指定されたファイルをどのように処理するかは、ファイル名に付加された接尾辞で決まります。次の表以外の接尾辞を持つファイルや、接尾辞がないファイルはリンカーに渡されます。
表 2–1 C++ コンパイラが認識できるファイル名接尾辞
接尾辞 |
言語 |
処理 |
---|---|---|
C++ |
C++ ソースファイルとしてコンパイルし、オブジェクトファイルを現在のディレクトリに入れる。オブジェクトファイルのデフォルト名は、ソースファイル名に .o 接尾辞が付いたものになる。 |
|
C++ |
.c 接尾辞と同じ処理。 |
|
C++ |
.c 接尾辞と同じ処理。 |
|
C++ |
.c 接尾辞と同じ処理。 |
|
C++ |
.c 接尾辞と同じ処理。 |
|
C++ |
.c 接尾辞と同じ処理。 |
|
C++ |
C++ ソースファイルとして扱われるプリプロセッサ出力ファイル。.c 接尾辞と同じ処理。 |
|
アセンブラ |
ソースファイルをアセンブラを使ってアセンブルする。 |
|
アセンブラ |
C 言語プリプロセッサとアセンブラを使ってソースファイルをアセンブルする。 |
|
インライン展開 |
アセンブリ用のインラインテンプレートファイルを使ってインライン展開を行う。コンパイラはテンプレートを使って、選択されたルーチンのインライン呼び出しを展開します(インラインテンプレートファイルは、特殊なアセンブラファイルです。inline(1) のマニュアルページを参照してください) |
|
オブジェクトファイル |
オブジェクトファイルをリンカーに渡す |
|
静的 (アーカイブ) ライブラリ |
オブジェクトライブラリの名前をリンカーに渡す。 |
|
動的 (共有) ライブラリ |
共有オブジェクトの名前をリンカーに渡す。 |
C++ コンパイラでは、複数のソースファイルをコマンド行に指定できます。コンパイラが直接または間接的にサポートするファイルも含めて、コンパイラによってコンパイルされる 1 つのソースファイルを「コンパイル単位」といいます。 C++ では、それぞれのソースが別個のコンパイル単位として扱われます。
C++ 5.1 以降のコンパイラは、テンプレートキャッシュディレクトリにテンプレートキャッシュのバージョンを示す文字列を付けます。
このコンパイラは、デフォルト時にはキャッシュを使用しません。キャッシュを使用するのは、-instances=extern が指定されているときだけです。キャッシュを使用する場合、コンパイラはキャッシュディレクトリのバージョンを調べ、その結果キャッシュバージョンに問題があることがわかると、エラーメッセージを出力します。将来の C++ コンパイラもキャッシュのバージョンを調べます。たとえば、将来のコンパイラは異なるテンプレートキャッシュのバージョン識別子を持っているため、現在のリリースで作成されたキャッシュディレクトリを処理しようとすると、次のようなエラーを出力します。
SunWS_cache: エラー: /SunWS_cache のテンプレートデータベースは、 このコンパイラと互換性がありません。 |
同様に、現在のリリースのコンパイラで以降のバージョンのコンパイラで作成されたキャッシュディレクトリを処理しようとすると、エラーが発行されます。
C++ コンパイラ 5.0 で作成されたテンプレートキャッシュディレクトリにはバージョン識別子が付けられていません。しかし、現在のリリースのコンパイラは、5.0 のキャッシュディレクトリをエラーや警告なしに処理できます。これは、C++ コンパイラが 5.0 のキャッシュディレクトリを、使用できるディレクトリ形式に変換するためです。
C++ 5.0 コンパイラは、5.0 より新しいリリースのコンパイラが作成したキャッシュディレクトリを使用できません。C++ コンパイラ 5.0 は形式の違いを認識できず、C++ コンパイラ 5.1 (または、これ以降のリリース) で作成されたキャッシュディレクトリを処理しようとすると、エラーを発行します。
コンパイラをアップグレードする際には、必ずキャッシュを消去するようにするとよいでしょう。テンプレートキャッシュディレクトリ (ほとんどの場合、テンプレートキャッシュディレクトリの名前は SunWS_cache) が入っているディレクトリすべてに対し、CCadmin -clean を実行します。CCadmin -clean の代わりに、rm -rf SunWS_cache と指定しても同様の結果が得られます。
この節では、プログラムのコンパイルとリンクについていくつかの側面から説明します。次の例では、CC を使って 3 つのソースファイルをコンパイルし、オブジェクトファイルをリンクして prgrm という実行可能ファイルを作成します。
example% CC file1.cc file2.cc file3.cc -o prgrm |
前の例では、コンパイラがオブジェクトファイル (file1.o、file2.o、file3.o)を自動的に生成し、次にシステムリンカーを起動してファイル prgrm の実行可能プログラムを作成します。
コンパイル後も、オブジェクトファイル (file1.o、file2.o、file3.o) はそのまま残ります。この規則のおかげで、ファイルの再リンクと再コンパイルを簡単に行えます。
ソースファイルが 1 つだけであるプログラムに対してコンパイルとリンクを同時に行なった場合は、対応する .o ファイルが自動的に削除されます。複数のソースファイルをコンパイルする場合を除いて、すべての .o ファイルを残すためにはコンパイルとリンクを別々に行なってください。
コンパイルが失敗すると、エラーごとにメッセージが返されます。エラーがあったソースファイルの .o ファイルは生成されず、実行可能プログラムも作成されません。
コンパイルとリンクは別々に行うことができます。-c オプションを指定すると、ソースファイルがコンパイルされて .o オブジェクトファイルが生成されますが、実行可能ファイルは作成されません。 -c オプションを指定しないと、コンパイラはリンカーを起動します。コンパイルとリンクを分離すれば、1 つのファイルを修正するためにすべてのファイルを再コンパイルする必要はありません。次の例では、最初の手順で 1 つのファイルをコンパイルし、次の手順でそれをほかのファイルとリンクします。
example% CC -c file1.cc 新しいオブジェクトファイルを作成する example% CC -o prgrm file1.o file2.o file3.o 実行可能ファイルを作成する |
リンク時には (2 行目)、完全なプログラムを作成するのに必要なすべてのオブジェクトファイルを必ず 指定してください。オブジェクトファイルが足りないと、リンクは「undefined external reference (未定義の外部参照がある)」エラーで、ルーチンがないために失敗します。
コンパイルとリンクを別々に実行する場合で、次のコンパイラオプションを使用する場合は、コンパイルとリンクの整合性を保つことが非常に重要です。
-B
-compat
-fast
-g
-g0
-library
-misalign
-mt
-p
-xa
-xarch
-xcg92 および -xcg89
-xipo
-xpagesize
-xpg
-xprofile
-xtarget
これらのオプションのいずれかを使用してサブプログラムをコンパイルした場合は、リンクでも同じオプションを使用してください。
-library、-fast、-xtarget、-xarch オプションの場合、コンパイルとリンクを同時に行えば渡されるはずのリンカーオプションも含める必要があります。
-p、-xpg、-xprofile オプションの場合、ある段階ではオプションを指定して別の段階では指定しないと、プログラムの正しさには影響はありませんが、プロファイル処理ができなくなります。
-g、-g0 オプションの場合、ある段階ではオプションを指定して別の段階では指定しないと、プログラムの正しさには影響はありませんが、プログラムを正しくデバッグできなくなります。これらのオプションでコンパイルされず、-g または -g0 でリンクされるいずれのモジュールも、デバッグには使用できません。-g または -g0 オプション付きの main 関数を含むモジュールをコンパイルすることは、通常はデバッグに必要になります。
次の例では、-xcg92 コンパイラオプションを使用してプログラムをコンパイルしています。このオプションは -xtarget=ss1000 用のマクロであり、-xarch=v8 -xchip=super -xcache=16/64/4:1024/64/1 と展開されます。
example% CC -c -xcg92 sbr.cc example% CC -c -xcg92 smain.cc example% CC -xcg92 sbr.o smain.o |
プログラムがテンプレートを使用する場合は、リンク時にその中のいくつかがインスタンス化される可能性があります。 その場合、インスタンス化されたテンプレートは最終行 (リンク行) のコマンド行オプションを使用してコンパイルされます。
64 ビットオブジェクトのコンパイル、リンク、および実行は、V9 SPARC の Solaris 8 以降のオペレーティングシステムで 64 ビットカーネルが動作しているものだけがサポートされています。64 ビットのコンパイルは、-xarch=v9 オプション、-xarch=v9a オプションまたは、-xarch=v9b オプションで指定します。
-verbose オプションを使用すると、呼び出される名前やバージョン番号および各コンパイル段階のコマンド行など、プログラムのコンパイル中に役立つ情報を表示できます。
コマンド行に指定された引数をコンパイラが認識できない場合には、それらはリンカーオプション、オブジェクトプログラムファイル名、ライブラリ名のいずれかとみなされます。
基本的には次のように区別されます。
認識できない非オプション (先頭にダッシュかプラス符号 (+) が付いていないもの)には、警告が生成されません。ただし、リンカーへの引き渡しは行われます。リンカーも認識できないと、リンカーからエラーメッセージが生成されます。
次の例で、 -bit は CC によって認識されないため、リンカー (ld) に渡されます。リンカーはこれを解釈しようとします。単一文字の ld オプションは連続して指定できるので、リンカーは -bit を -b、-i、-t とみなします。これらはすべて有効な ld オプションです。しかし、これは本来の意図とは異なります。
example% CC -bit move.cc <- -bit は CC オプションとして認識されない CC: 警告: ld が起動される場合は、オプション -bit は ld に渡されます。 それ以外は無視されます。 |
次の例では、CC オプション -fast を指定しようとしましたが、先頭のダッシュ (-) を入力しませんでした。コンパイラはこの引数もリンカーに渡します。リンカーはこれをファイル名とみなします。
example% CC fast move.cc <- ユーザーは -fast と入力したつもりだった move.CC: ld: 重大なエラー: ファイル fast: ファイルをオープンできません: ファイルも ディレクトリもありません。 ld: 重大なエラー: ファイル処理エラー。a.out に書き込まれる出力はありません。 |
C++ コンパイラパッケージは、フロントエンド (CC コマンド本体)、オプティマイザ (最適化)、コードジェネレータ (コード生成)、アセンブラ、テンプレートのプリリンカー (リンクの前処理をするプログラム)、リンクエディタから構成されています。コマンド行オプションでほかの指定を行わないかぎり、CC コマンドはこれらの構成要素をそれぞれ起動します。
これらの構成要素はいずれもエラーを生成する可能性があり、構成要素はそれぞれ異なる処理を行うため、エラーを生成した構成要素を識別することがエラーの解決に役立つことがあります。 それには、-v オプションと -dryrun オプションを使用します。
次の表に示すように、コンパイラの構成要素への入力ファイルには異なるファイル名接尾辞が付いています。どのようなコンパイルを行うかは、この接尾辞で決まります。ファイル名接尾辞の意味については、表 2–1 を参照してください。
表 2–2 C++ コンパイルシステムの構成要素
構成要素 |
内容の説明 |
使用時の注意 |
---|---|---|
フロントエンド (コンパイラプリプロセッサ (前処理系) とコンパイラ) | ||
SPARC: コードオプティマイザ |
-xO[2-5]、-fast |
|
x86: 中間言語トランスレータ |
-xO[2-5]、-fast |
|
SPARC: アセンブリ言語テンプレートのインライン展開 |
.il ファイルを指定 |
|
x86: 内部手続きアナライザ |
-xO4、-xO5、あるいは -fast 付きの -xcrossfile=1 |
|
アセンブラ | ||
SPARC: コード生成、インライン機能、アセンブラ |
|
|
ube |
x86: コードジェネレータ |
-xO[2-5]、-fast |
テンプレートのプリリンカー | ||
従来のリンクエディタ |
この節では、C++ コンパイラ特有の前処理の指示について説明します。
プリプロセッサキーワード pragma は C++ 標準の一部ですが、書式、内容、および意味はコンパイラごとに異なります。C++ コンパイラで認識されるプラグマのリストについては、「A.2.182 -z[ ]arg」を参照してください。
C++ コンパイラでは次の書式の #define プリプロセッサの指示を受け入れます。
#define identifier (...) replacement_list #define identifier (identifier_list, ...) replacement_list |
マクロパラメータリストの終わりが省略符号である場合、マクロパラメータより多くの引数をマクロの呼び出しで使用できます。追加の引数は、マクロ交換リストにおいて __VA_ARGS__ という名前で参照できる、コンマを含んだ単一文字列にまとめられます。次の例は、変更可能な引数リストマクロの使い方を示しています。
#define debug(...) fprintf(stderr, __VA_ARGS__) #define showlist(...) puts(#__VA_ARGS__) #define report(test, ...) ((test)?puts(#test):\ printf(__VA_ARGS__)) debug("Flag"); debug("X = %d\n",x); showlist(The first, second, and third items.); report(x>y, "x is %d but y is %d", x, y); |
この結果は、次のようになります。
fprintf(stderr, "Flag"); fprintf(stderr, "X = %d\n", x); puts("The first, second, and third items."); ((x>y)?puts("x>y"):printf("x is %d but y is %d", x, y)); |
付録の表 A–2 は、事前に定義されているマクロを示しています。これらの値は、#ifdef のようなプリプロセッサに対する条件式の中で使用できます。+p オプションを指定すると、sun、unix、sparc、および i386 の事前定義マクロは自動的に定義されません。
#error 指令は、警告生成後にコンパイルを続行しなくなりました。以前の #error 指令は、警告を生成してコンパイルを続行していました。新しい #error では、ほかのコンパイラとの整合性が確保され、エラーメッセージを生成してコンパイルをすぐに停止するようになりました。コンパイラは終了して障害をレポートします。
コンパイルに必要なメモリー量は、次の要素によって異なります。
各手続きのサイズ
最適化のレベル
仮想メモリーに対して設定された限度
ディスク上のスワップファイルのサイズ
SPARC プラットフォームでメモリーが足りなくなると、オプティマイザは最適化レベルを下げて現在の手続きを実行することでメモリー不足を補おうとします。それ以後のルーチンについては、コマンド行の -xOlevel オプションで指定した元のレベルに戻ります。
1 つのファイルに多数のルーチンが入っている場合、それをコンパイルすると、メモリーやスワップ領域が足りなくなることがあります。コンパイラがメモリー不足状態になった場合には、最適化レベルを下げてみてください。あるいは、複数のルーチンソースファイルを 1 ファイルに 1 ルーチンずつ入れて分割します。
現在のスワップ領域は swap -s コマンドで表示できます。 詳細は、swap(1M) のマニュアルページを参照してください。
swap コマンドを使った例を次に示します。
example% swap -s total: 40236k bytes allocated + 7280k reserved = 47516k used, 1058708k available |
ワークステーションのスワップ領域を増やすには、mkfile(1M) と swap(1M) コマンドを使用します。そのためには、スーパーユーザーである必要があります。mkfile コマンドは特定サイズのファイルを作成し、swap -a はこのファイルをシステムのスワップ領域に追加します。
example# mkfile -v 90m /home/swapfile /home/swapfile 94317840 bytes example# /usr/sbin/swap -a /home/swapfile |
1 つの手続きが数千行からなるような非常に大きなルーチンを -xO3 以上でコンパイルすると、大容量のメモリーが必要になることがあります。このようなときには、システムのパフォーマンスが低下します。これを制御するには、1 つのプロセスで使用できる仮想メモリーの量を制限します。
sh シェルで仮想メモリーを制限するには、ulimit コマンドを使用します。 詳細は、sh(1) のマニュアルページを参照してください。
次の例では、仮想メモリーを 16M バイトに制限しています。
example$ ulimit -d 16000 |
csh シェルで仮想メモリーを制限するには、limit コマンドを使用します。 詳細は、csh(1) のマニュアルページを参照してください。
次の例でも、仮想メモリーを 16M バイトに制限しています。
example% limit datasize 16M |
どちらの例でも、オプティマイザは データ空間が 16M バイトになった時点でメモリー不足が発生しないような手段をとります。
仮想メモリーの限度は、システムの合計スワップ領域の範囲内です。さらに実際は、大きなコンパイルが行われているときにシステムが正常に動作できるだけの小さい値である必要があります。
スワップ領域の半分以上がコンパイルによって使用されることがないようにしてください。
スワップ領域が 32M バイトなら次のコマンドを使用します。
sh シェルの場合
example$ ulimit -d 16000 |
csh の場合
example% limit datasize 16M |
最適な設定は、必要な最適化レベルと使用可能な実メモリーと仮想メモリーの量によって異なります。
ワークステーションには、少なくとも 64M バイトのメモリーが必要です。 推奨は 128M バイトです。
example% /usr/sbin/dmesg | grep mem mem = 655360K (0x28000000) avail mem = 602476544 |
CCFLAGS 環境変数で特別なシェル別名を定義するか make を使用すれば、複雑なコンパイラコマンドを簡略化できます。
次の例では、頻繁に使用するオプションをコマンドの別名として定義します。
example% alias CCfx "CC -fast -xnolibmil" |
次に、この別名 CCfx を使用します。
example% CCfx any.C |
前述のコマンド CCfx は、次のコマンドを実行するのと同じことです。
example% CC -fast -xnolibmil any.C |
CCFLAGS 環境変数を設定すると、一度に特定のオプションを指定できます。
CCFLAGS 変数は、コマンド行に明示的に指定できます。次の例は、CCFLAGS の設定方法を示したものです (C シェル)。
example% setenv CCFLAGS '-xO2 -xsb' |
次の例では、CCFLAGS を明示的に使用しています。
example% CC $CCFLAGS any.cc |
make を使用する場合、CCFLAGS 変数が前述の例のように設定され、メイクファイルのコンパイル規則が暗黙的に使用された状態で make を呼び出すと、次のコンパイルが行われます。files... は、複数のファイル名を示します。
CC -xO2 -xsb files...
make ユーティリティーは、Sun のすべてのコンパイラで簡単に使用できる非常に強力なプログラム開発ツールです。詳細については make(1S) のマニュアルページを参照してください。
メイクファイルの暗黙のコンパイラ規則を使用する、つまり、C++ コンパイル行がない場合は、make プログラムによって CCFLAGS が自動的に使用されます。
メイクファイルに別のファイルの接尾辞を追加すると、C++ にその接尾辞を取り込むことができます。次の例は、C++ ファイルに対する有効な接尾辞として .cpp を追加します。次のように、メイクファイルに SUFFIXES マクロを追加してください。
SUFFIXES: .cpp .cpp~
(この行は、メイクファイル内のどこにでも入れることができます)。
次の内容をメイクファイルに追加します。インデントされている行は、必ずタブでインデントしてください。
.cpp: $(LINK.cc) -o $@ $< $(LDLIBS) .cpp~: $(GET) $(GFLAGS) -p $< > $*.cpp $(LINK.cc) -o $@ $*.cpp $(LDLIBS) .cpp.o: $(COMPILE.cc) $(OUTPUT_OPTION) $< .cpp~.o: $(GET) $(GFLAGS) -p $< > $*.cpp $(COMPILE.cc) $(OUTPUT_OPTION) $< .cpp.a: $(COMPILE.cc) -o $% $< $(COMPILE.cc) -xar $@ $% $(RM) $% .cpp~.a: $(GET) $(GFLAGS) -p $< > $*.cpp $(COMPILE.cc) -o $% $< $(COMPILE.cc) -xar $@ $% $(RM) $% |
標準ライブラリファイル名には、.h 接尾辞が付きません。 標準ライブラリファイルには、istream、fstream、というような名前が付きます。また、テンプレートのソースファイルは、istream.cc、fstream.cc といった名前になります。
この章では、コマンド行 C++ コンパイラオプションの使用方法について説明してから、機能別にその使用方法を要約します。オプションの詳細は、「16.8 dlopen を使って C プログラムから C++ ライブラリにアクセスする」で説明します。
次の表は、一般的なオプション構文の形式の例です。
表 3–1 オプション構文形式の例
構文形式 |
例 |
---|---|
-option |
-E |
-optionvalue |
-Ipathname |
-option=value |
-xunroll=4 |
-option value |
-o filename |
括弧、中括弧、角括弧、パイプ文字、および省略符号は、オプションの説明で使用されているメタキャラクタです。これらは、オプションの一部ではありません。構文の説明での表記規則は本書の最初の「はじめに」を参照してください。
C++ コンパイラのオプションを使用する際の一般的な注意事項は次のとおりです。
-llib オプションは、ライブラリ liblib.a (または liblib.so) とリンクするときに使用します。 ライブラリが正しい順序で検索されるように、-lib オプションは、ソースやオブジェクトのファイル名のあとに指定する方が安全です。
一般にコンパイラオプションは左から右に処理され、マクロオプション (ほかのオプションを含むオプション) は条件に応じて内容が変更されます (ただし -U オプションだけは、すべての -D オプション後に処理されます)。これはリンカーオプションには当てはまりません。
-features、-I-l、-L、-library、-pti、-R、-staticlib、-U、-verbose および -xprefetch オプションで指定した内容は蓄積され、上書きはされません。
-D オプションは累積されますが、同じ名前に複数の -D オプションがあるとお互いに上書きされます。
ソースファイル、オブジェクトファイル、ライブラリは、コマンド行に指定された順序でコンパイルおよびリンクされます。
この節には、参照しやすいように、コンパイラオプションが機能別に分類されています。各オプションの詳細は、「16.8 dlopen を使って C プログラムから C++ ライブラリにアクセスする」を参照してください。
これらのオプションは、特に記載がないかぎりすべてのプラットフォームに適用されます。Solaris SPARC システム版のオペレーティングシステムに特有の機能は SPARC として表記され、x86 システム版のオペレーティングシステムに特有の機能は x86 として表記されます。
オプション |
処理 |
---|---|
-compat |
コンパイラの主要リリースとの互換モードを設定します。 |
+e{0|1} |
仮想テーブル生成を制御します。 |
-g |
デバッグ用にコンパルします。 |
-KPIC |
位置に依存しないコードを生成します。 |
-Kpic |
位置に依存しないコードを生成します。 |
-mt |
マルチスレッド化したコードのコンパイルとリンクを行います。 |
-xcode=a |
(SPARC) コードのアドレス空間を指定します。 |
-Merge |
(SPARC) データセグメントとテキストセグメントをマージします。 |
-xmodel |
64 ビットオブジェクトの形式を Solaris x86 プラットフォーム用に変更します。 |
+w |
意図しない結果が生じる可能性のあるコードを特定します。 |
+w2 |
+w で生成される警告以外に、通常は問題がなくても、プログラムの移植性を低下させる可能性がある技術的な違反についての警告も生成します。 |
-xregs |
コンパイラは、一時記憶領域として使用できるレジスタ (一時レジスタ) が多ければ、それだけ高速なコードを生成します。このオプションは、利用できる一時レジスタを増やしますが、必ずしもそれが適切であるとはかぎりません。 |
-z arg |
リンカーオプション |
オプション |
処理 |
---|---|
-instlib |
指定ライブラリにすでに存在しているテンプレートインスタンスの生成を禁止します。 |
-m32|-m64 |
コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。 |
-xinstrument |
スレッドアナライザで分析するために、プログラムをコンパイルして計測します。 |
-xjobs |
コンパイラが処理を行うために作成するプロセスの数を設定します。 |
-xpch |
共通の一連のインクルードファイル群を共有するソースファイルを持つアプリケーションのコンパイル時間を短縮できます。 |
-xpchstop |
-xpch でプリコンパイル済みヘッダーファイルを作成する際に適用される、最後のインクルードファイルを指定します。 |
-xprofile_ircache |
(SPARC) -xprofile=collect で保存されたコンパイルデータを再使用します。 |
-xprofile_pathmap |
(SPARC) 1 つのプロファイルディレクトリに存在する複数のプログラムや共有ライブラリをサポートします。 |
オプション |
処理 |
---|---|
+d |
C++ インライン関数を展開しません。 |
-dryrun |
ドライバがコンパイラに渡すオプションを表示しますが、コンパイルはしません。 |
-E |
C++ ソースファイルにプリプロセッサを実行し、結果を stdout に出力しますが、コンパイルはしません。 |
-g |
デバッグ用にコンパルします。 |
-g0 |
デバッグ用にコンパイルしますが、インライン機能は無効にしません。 |
-H |
インクルードされるファイルのパス名を出力します。 |
-keeptmp |
コンパイル中に作成されたすべての一時ファイルを残します。 |
-migration |
以前のコンパイラからの移行に関する情報の参照先を表示します。 |
-P |
ソースの前処理だけを行い、.i ファイルに出力します。 |
-Qoption |
オプションをコンパイル中の各処理に直接渡します。 |
-readme |
README ファイルの内容を表示します。 |
-s |
実行可能ファイルからシンボルテーブルを取り除きます。 |
-temp=dir |
一時ファイルのディレクトリを指定します。 |
-verbose=vlst |
コンパイラの冗長性を制御します。 |
-xcheck |
スタックオーバーフローの実行時検査を追加します。 |
-xdumpmacros |
定義内容、定義および解除された位置、使用されている場所に関する情報を出力します。 |
-xe |
構文と意味のエラーのチェックだけを行います。 |
-xhelp=flags |
コンパイラオプションの要約を一覧表示します。 |
-xport64 |
32 ビットアーキテクチャーから 64 ビットアーキテクチャーへの移植中の一般障害について警告します。 |
-xs |
オブジェクト (.o) ファイルなしに dbx でデバッグできるようにします。 |
-xsb |
ソースコードブラウザ用のテーブル情報を作成します。 |
-xsbfast |
ソースブラウザ情報を作成するだけでコンパイルはしません。 |
オプション |
処理 |
---|---|
-fma |
(SPARC) 浮動小数点の Fused Multiply-Add 命令の自動生成を有 効にします。 |
-fns[={no|yes}] |
(SPARC) SPARC 非標準浮動小数点モードを有効または無効にします。 |
-fprecision=p |
x86: 浮動小数点精度モードを設定します。 |
-fround=r |
起動時に IEEE 丸めモードを有効にします。 |
-fsimple=n |
浮動小数点最適化の設定を行います。 |
-fstore |
x86: 浮動小数点式の精度を強制的に使用します。 |
-ftrap=tlst |
起動時に IEEE トラップモードを有効にします。 |
-nofstore |
x86: 強制された式の精度を無効にします。 |
-xlibmieee |
例外時に libm が数学ルーチンに対し IEEE 754 値を返します。 |
オプション |
処理 |
---|---|
-compat |
コンパイラの主要リリースとの互換モードを設定します。 |
-features=alst |
C++ の各機能を有効化または無効化します。 |
-xchar |
文字型が符号なしと定義されているシステムからのコードの移行を容易に行えるようにします。 |
-xldscope |
共有ライブラリをより速くより安全に作成するため、変数と関数の定義のデフォルトリンカースコープを制御します。 |
-xthreadvar |
(SPARC) デフォルトのスレッドローカルな記憶装置へのアクセスモードを変更します。 |
-xtrigraphs |
文字表記シーケンスを認識します。 |
-xustr |
16 ビット文字で構成された文字リテラルを認識します。 |
オプション |
処理 |
---|---|
-Bbinding |
ライブラリのリンク形式を、シンボリック、動的、静的のいずれかから指定します。 |
-d{y|n} |
実行可能ファイル全体に対して動的ライブラリを使用できるかどうか指定します。 |
-G |
実行可能ファイルではなく動的共有ライブラリを構築します。 |
-hname |
生成される動的共有ライブラリに名前を割り当てます。 |
-i |
ld(1) がどのような LD_LIBRARY_PATH 設定も無視します。 |
-Ldir |
dir に指定したディレクトリを、ライブラリの検索に使用するディレクトリとして追加します。 |
-llib |
リンカーのライブラリ検索リストに liblib.a または liblib.so を追加します。 |
-library=llst |
特定のライブラリとそれに対応するファイルをコンパイルとリンクに強制的に組み込みます。 |
-mt |
マルチスレッド化したコードのコンパイルとリンクを行います。 |
-norunpath |
ライブラリのパスを実行可能ファイルに組み込みません。 |
-Rplst |
動的ライブラリの検索パスを実行可能ファイルに組み込みます。 |
-staticlib=llst |
静的にリンクする C++ ライブラリを指定します。 |
-xar |
アーカイブライブラリを作成します。 |
-xbuiltin[=opt] |
標準ライブラリ呼び出しの最適化を有効または無効にします。 |
-xia |
(SPARC) 適切な区間演算ライブラリをリンクし、浮動小数点環境を設定します。 |
-xlang=l[,l] |
該当する実行時ライブラリをインクルードし、指定された言語に適切な実行時環境を用意します。 |
-xlibmieee |
例外時に libm が数学ルーチンに対し IEEE 754 値を返します。 |
-xlibmil |
最適化のために、選択された libm ライブラリルーチンをインライン展開します。 |
-xlibmopt |
最適化された数学ルーチンのライブラリを使用します。 |
-xlic_lib=sunperf |
(SPARC) Sun Performance LibraryTM とリンクします。C++ の場合、-library=sunperf は、このライブラリをリンクするために適した方法です。 |
-xnativeconnect |
オブジェクトファイルと以降の共有ライブラリ内にインタフェース情報を含めることで、共有ライブラリが JavaTM プログラミング言語のコードとインタフェースをとれるようにします。 |
-xnolib |
デフォルトのシステムライブラリとのリンクを無効にします。 |
-xnolibmil |
コマンド行の -xlibmil を取り消します。 |
-xnolibmopt |
数学ルーチンのライブラリを使用しません。 |
オプション |
処理 |
---|---|
-xlic_lib=sunperf |
(SPARC) Sun Performance Library とリンクします。C++ の場合、-library=sunperf は、このライブラリをリンクするために適した方法です。 |
-xlicinfo |
ライセンスサーバー情報を表示します。 |
次のオプションは、現在は廃止されているためにコンパイラに受け入れられないか、将来のリリースでは削除されます。
オプション |
処理 |
---|---|
-library=%all |
将来のリリースで削除されます。 |
-noqueue |
ライセンス情報のキューイングを行いません。 |
-ptr |
コンパイラは無視します。将来のリリースのコンパイラがこのオプションを別の意味で使用する可能性もあります。 |
-vdelx |
将来のリリースで削除されます。 |
-xcg89 |
-xtarget=ss2 を使用します。 |
-xnativeconnect |
廃止。これに代わるオプションはありません。 |
-xprefetch=yes |
代わりに - xprefetch=auto,explicit を使用します。 |
-xprefetch=no |
代わりに -xprefetch=no%auto,no%explicit を使用します。 |
オプション |
処理 |
---|---|
-c |
コンパイルのみ。オブジェクト (.o) ファイルを作成しますが、リンクはしません。 |
-dryrun |
ドライバがコンパイラに渡すオプションを表示しますが、コンパイルはしません。 |
-E |
C++ ソースファイルにプリプロセッサを実行し、結果を stdout に出力しますが、コンパイルはしません。 |
-erroff |
コンパイラの警告メッセージを抑止します。 |
-errtags |
各警告メッセージのメッセージタグを表示します。 |
-errwarn |
指定の警告メッセージが出力されると、cc はエラーステータスを返して終了します。 |
-filt |
コンパイラがリンカーエラーメッセージに適用するフィルタリングを抑止します。 |
-G |
実行可能ファイルではなく動的共有ライブラリを構築します。 |
-H |
インクルードされるファイルのパス名を出力します。 |
-migration |
以前のコンパイラからの移行に関する情報の参照先を表示します。 |
-o filename |
出力ファイルや実行可能ファイルの名前を filename にします。 |
-P |
ソースの前処理だけを行い、.i ファイルに出力します。 |
-Qproduce sourcetype |
CC ドライバに sourcetype (ソースタイプ) 型のソースコードを生成するよう指示します。 |
-s |
実行可能ファイルからシンボルテーブルを取り除きます。 |
-verbose=vlst |
コンパイラの冗長性を制御します。 |
+w |
必要に応じて追加の警告を出力します。 |
-w |
警告メッセージを抑止します。 |
-xdumpmacros |
定義内容、定義および解除された位置、使用されている場所に関する情報を出力します。 |
-xe |
ソースファイルの構文と意味のチェックだけを行い、オブジェクトや実行可能コードの出力はしません。 |
-xhelp=flags |
コンパイラオプションの要約を一覧表示します。 |
-xhelp=readme |
README ファイルの内容を表示します。 |
-xM |
メイクファイルの依存情報を出力します。 |
-xM1 |
依存情報の生成は行いますが、 /usr/include の組み込みはしません。 |
-xsb |
ソースコードブラウザ用のテーブル情報を作成します。 |
-xsbfast |
ソースブラウザ情報を作成するだけでコンパイルはしません。 |
-xtime |
コンパイル処理ごとの実行時間を報告します。 |
-xwe |
ゼロ以外の終了状態を返すことによって、すべての警告をエラーに変換します。 |
-z arg |
オプション |
処理 |
---|---|
-fast |
一部のプログラムで最適な実行速度が得られるコンパイルオプションの組み合わせを選択します。 |
-fma |
(SPARC) 浮動小数点の Fused Multiply-Add 命令の自動生成を有効にします。 |
-g |
パフォーマンスの解析 (およびデバッグ) に備えてプログラムを用意するようにコンパイラとリンカーの両方に指示します。 |
-s |
実行可能ファイルからシンボルテーブルを取り除きます。 |
-m32|-m64 |
コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。 |
-xalias_level |
コンパイラで、型に基づく別名の解析および最適化を実行するように指定します。 |
-xarch=isa |
ターゲットのアーキテクチャー命令セットを指定します。 |
-xbinopt |
あとで最適化、変換、分析を行うために、バイナリを準備します。 |
-xbuiltin[=opt] |
標準ライブラリ呼び出しの最適化を有効または無効にします。 |
-xcache=c |
(SPARC) オプティマイザのターゲットキャッシュプロパティーを定義します。 |
-xcg89 |
一般的な SPARC アーキテクチャー用のコンパイルを行います。 |
-xcg92 |
SPARC V8 アーキテクチャー用のコンパイルを行います。 |
-xchip=c |
ターゲットのプロセッサチップを指定します。 |
-xF |
リンカーによる関数と変数の順序変更を有効にします。 |
-xinline=flst |
どのユーザーが作成したルーチンをオプティマイザでインライン化するかを指定します。 |
-xipo |
内部手続きの最適化を実行します。 |
-xlibmil |
最適化のために、選択された libm ライブラリルーチンをインライン展開します。 |
-xlibmopt |
最適化された数学ルーチンライブラリを使用します。 |
-xlinkopt |
(SPARC) オブジェクトファイル内のあらゆる最適化のほかに、結果として出力される実行可能ファイルや動的ライブラリのリンク時最適化も行います。 |
-xmemalign=ab |
(SPARC) メモリーの予想される最大境界整列と境界整列していないデータアクセスの動作を指定します。 |
-xnolibmil |
コマンド行の -xlibmil を取り消します。 |
-xnolibmopt |
数学ルーチンのライブラリを使用しません。 |
-xOlevel |
最適化レベルを level にします。 |
-xpagesize |
スタックとヒープの優先ページサイズを設定します。 |
-xpagesize_heap |
ヒープの優先ページサイズを設定します。 |
-xpagesize_stack |
スタックの優先ページサイズを設定します。 |
-xprefetch[=lst] |
(SPARC) 先読みをサポートするアーキテクチャーで先読み命令を有効にします。 |
-xprefetch_level |
-xprefetch=auto を設定したときの先読み命令の自動挿入を制御します。 |
-xprofile |
(SPARC) 実行時プロファイルデータを収集したり、このデータを使って最適化します。 |
-xregs=rlst |
(SPARC) 一時レジスタの使用を制御します。 |
-xsafe=mem |
(SPARC) メモリーに関するトラップを起こさないものとします。 |
-xspace |
(SPARC) コードサイズが大きくなるような最適化は行いません。 |
-xtarget=t |
ターゲットの命令セットと最適化のシステムを指定します。 |
-xthreadvar |
(SPARC) デフォルトのスレッドローカルな記憶装置へのアクセスモードを変更します。 |
-xunroll=n |
可能な場合は、ループを展開します。 |
-xvis |
(SPARC) VISTM 命令セットに定義されているアセンブリ言語テンプレートをコンパイラが認識します。 |
オプション |
処理 |
---|---|
-Dname[=def] |
シンボル name をプリプロセッサに定義します。 |
-E |
C++ ソースファイルにプリプロセッサを実行し、結果を stdout に出力しますが、コンパイルはしません。 |
-H |
インクルードされるファイルのパス名を出力します。 |
-P |
ソースの前処理だけを行い、.i ファイルに出力します。 |
-Uname |
プリプロセッサシンボル name の初期定義を削除します。 |
-xM |
メイクファイルの依存情報を出力します。 |
-xM1 |
依存情報を生成しますが、/usr/include は除きます。 |
オプション |
処理 |
---|---|
-p |
prof でプロファイル処理するためのデータを収集するオブジェクトコードを用意します。 |
-xa |
プロファイル用のコードを生成します。 |
-xpg |
gprof プロファイラによるプロファイル処理用にコンパイルします。 |
-xprofile |
(SPARC) 実行時プロファイルデータを収集したり、このデータを使って最適化します。 |
オプション |
処理 |
---|---|
-migration |
以前のコンパイラからの移行に関する情報の参照先を表示します。 |
-xhelp=flags |
コンパイラオプションの要約を一覧表示します。 |
-xhelp=readme |
README ファイルの内容を表示します。 |
オプション |
処理 |
---|---|
-H |
インクルードされるファイルのパス名を出力します。 |
-Ipathname |
include ファイル検索パスに pathname を追加します。 |
-I- |
インクルードファイル検索規則を変更します。 |
-xM |
メイクファイルの依存情報を出力します。 |
-xM1 |
依存情報を生成しますが、/usr/include は除きます。 |
オプション |
処理 |
---|---|
-instances=a |
テンプレートインスタンスの位置とリンケージを制御します。 |
-ptipath |
テンプレートソースの検索ディレクトリを追加指定します。 |
-template=wlst |
さまざまなテンプレートオプションを有効または無効にします。 |
オプション |
処理 |
---|---|
-mt |
マルチスレッド化したコードのコンパイルとリンクを行います。 |
-xsafe=mem |
(SPARC) メモリーに関するトラップを起こさないものとします。 |
-xthreadvar |
(SPARC) デフォルトのスレッドローカルな記憶装置へのアクセスモードを変更します。 |