SunOS 4.x から Solaris 2.6 に移行する開発者にとって最も大きな変更点は、C コンパイラがバンドルされなくなったことです。コンパイラをバンドルしない理由の 1 つに、動的なカーネルがあります。動的なカーネルでは、必要に応じて自動的にデバイスが追加されるので、カーネルの再構築にコンパイラを使用する必要がありません。
ANCI C コンパイラは、アンバンドル製品の Sun WorkShopTMに含まれています。このコンパイラ製品は、Solaris 2.6 のオブジェクト形式である ELF 形式で実行可能ファイルを作成します。lint と lint ライブラリもアンバンドルです。
『Source Compatibility Guide』では、SunOS 4.x C コンパイラ (Sun C) によって実装された C 言語と『ANSI Programming Language C』(ANSI C) に定義されている C 言語の違いについて説明しています。これらの違いは、Sun C コンパイラ用のソースを ANSI C 準拠のコンパイラに移植するとき必要になります。
表 15-1 は、SunOS 4.x Sun C と ANSI C のコンパイラを Solaris 2.6 Sun WorkShop C++ 4.2 コンパイラと比較しています。これは単に情報を提供するための一覧で、デフォルトの Solaris 2.6 リリースで利用できる機能を説明するものではありません。
表 15-1 では、『American National Standard Information Systems - Programming Lnaguage XX3.159-1989, approved December 14, 1989』に基づく情報を示します。
次の点に注意してください。
「Yes」は、そのオプションがそのコンパイラによってサポートされることを示します。
オプションが変更されている場合、新しいオプションが示されます。
「No」は、オプションがそのドライバによってサポートされないことを示します。
Sun WorkShop C++ 4.2 の欄の「+」は SVID 仕様にとって必要なオプションを示します。
オプションまたはフラグ |
Sun C |
ANSI C |
Sun WorkShop C++ 4.2 |
説明 |
---|---|---|---|---|
-A symbol |
No |
Yes |
Yes |
cpp に assert を含む |
-a |
Yes |
Yes |
-xa |
基本ブロックの実行回数を数える |
-align |
Yes |
Yes |
No |
ページ揃え (ld) |
-assertx |
Yes |
Yes |
-z |
リンク時の assert を指定する |
-BX |
Yes |
Yes |
Yes |
バインディングタイプを指定する (SunOS リリース 5.6 のライブラリに対してのみ) |
-bnzero |
Yes |
Yes |
No |
非ゼロ AR を生成する |
-C |
Yes |
Yes |
No |
cpp のコメントを残す |
-c |
Yes |
Yes |
+Yes |
.o ファイルを生成 |
-cg87 |
Yes |
Yes |
No |
オプションを -cg87 に設定 |
-cg89 |
Yes |
Yes |
Yes |
オプションを -cg89 に設定 |
-dryrun |
Yes |
Yes |
Yes |
ドライバによって構築されるコマンドを表示 |
-Dx |
Yes |
Yes |
+Yes |
cpp にシンボル x を定義 |
-d |
Yes |
Yes |
No |
共通の定義の強制 (ld) |
-dalign |
Yes |
Yes |
Yes |
double はダブルワードで整列されると仮定する |
-dl |
Yes |
Yes |
No |
長いデータセグメント参照を生成 |
-d[y|n] | -BX | -BX |
Yes |
動的リンク [yes|no] |
-E |
Yes |
Yes |
+Yes |
cpp によるソースの実行 |
-e |
No |
No |
No |
ld のエントリポイント |
-F |
-O* |
-O* |
+No |
最適化指令 |
-f |
No |
No |
No |
浮動小数点サポート |
-fast |
Yes |
Yes |
Yes |
最高性能のためのオプション |
-fsingle |
Yes |
No |
No |
浮動小数点数は単精度 |
-fsingle2 |
Yes |
No |
No |
倍精度でない浮動小数点数として浮動小数点数を渡す |
-fnonstd |
Yes |
Yes |
Yes |
標準でない浮動小数点数オプション |
-fstore |
Yes |
No |
Yes |
記憶時に書き込みの強制 |
-G |
No |
No |
Yes |
-dn オプションで利用できない共用ライブラリの作成 |
-g |
Yes |
Yes |
+Yes |
dbx 用に情報を生成 |
-go |
Yes |
No |
No |
adb 用に情報を生成 |
-H |
Yes |
Yes |
Yes |
インクルードしたファイルのパスを出力 |
-h name |
No |
No |
Yes |
内部識別子としての名前を使用。 soname がリンカに渡される |
-help |
Yes |
Yes |
-flags |
オプションの表示 |
-Ix |
Yes |
Yes |
+Yes |
x を追加してパスを組み込む |
-J |
sun3 |
No |
No |
switch|case 用にロングオフセットを生成 |
-KPIC |
-PIC |
-PIC |
Yes |
ポジションに依存しないコード |
-Kpic |
-pic |
-pic |
Yes |
ショートオフセットによる PIC |
-Kminabi |
No |
No |
No |
ABI 準拠コード |
-libmil |
Yes |
Yes |
-xlibmil |
-fast の一部として libm.il を渡す |
-lx |
Yes |
Yes |
Yes |
オブジェクトライブラリの読み込み (ld 用) |
-Lx |
Yes |
Yes |
Yes |
ld ライブラリパスに x を追加 |
-M |
Yes |
Yes |
No |
依存事項の収集 |
-M mapfile |
Yes |
No |
No |
リンカに mapfile を渡す |
-misalign |
Yes |
Yes |
Yes |
整列されていない Sun-4 データを処理 |
-N |
Yes |
No |
No |
共有にしない |
-n |
Yes |
No |
No |
共有にする |
-native |
Yes |
Yes |
Yes |
適切な -cg オプションの使用 |
-noc2 |
Yes |
Yes |
No |
peephole (のぞき穴) を最適化しない |
-nolibmil |
Yes |
Yes |
-xnolibmil |
-fast で libm.il を渡さない |
-o file |
Yes |
Yes |
+Yes |
出力ファイルの名前の設定 |
-O[1,2,3,4] |
Yes |
Yes |
-x0[1,2,3,4] |
最適化されたコードの生成 |
-O |
Yes |
Yes |
+Yes |
最適化されたコードの生成 |
-P |
Yes |
Yes |
+Yes |
cppを使用してソースを実行し .i に出力 |
-PIC |
Yes |
No |
-KPIC |
ロングオフセットで pic コードを生成 |
-p |
Yes |
Yes |
+Yes |
prof のデータを収集 |
-pg |
Yes |
Yes |
-xpg |
gprof のデータを収集 |
-pic |
Yes |
Yes |
-Kpic |
ショートオフセットの pic コード |
-pipe |
Yes |
No |
No |
一時ファイルのかわりにパイプを使用 |
-purecross |
Yes |
No |
No |
VROOT にスラッシュを入れない |
-Qdir x |
Yes |
Yes |
-Y* |
x からコンパイラパスを探す |
-Qpath x |
Yes |
Yes |
-Y* |
-Qdir と同じ |
-Qn |
No |
No |
Yes |
バージョンスタンプ情報を追加しない |
-Qy |
No |
No |
Yes |
バージョンスタンプ情報を追加する |
-qdirx |
Yes |
Yes |
No |
x からコンパイラパスを探す |
-ql |
No |
No |
No |
lprof 用にデータを収集 |
-qp |
-p |
-p |
-p |
prof 用にデータを収集 |
-qpath x |
Yes |
Yes |
No |
-Qdir と同じ |
-Qoption cpp x |
Yes |
Yes |
Yes |
プログラム cpp にオプション x を渡す |
-Qoption iropt x |
Yes |
Yes |
Yes |
プログラム iropt にオプション x を渡す |
-Qoption cg x |
Yes |
Yes |
Yes |
プログラム cg にオプション x を渡す |
-Qoption inline x |
Yes |
Yes |
No |
プログラム inline にオプション x を渡す |
-Qoption as x |
Yes |
Yes |
No |
プログラム as にオプション x を渡す |
-Qoption asS x |
Yes |
Yes |
No |
プログラム asS にオプション x を渡す |
-Qoption ld x |
Yes |
Yes |
Yes |
プログラム ld にオプション x を渡す |
-qoption cpp x |
Yes |
Yes |
No |
プログラム cpp にオプション x を渡す |
-qoption ccom x |
Yes |
Yes |
No |
プログラム ccom にオプション x を渡す |
-qoption lintl x |
Yes |
Yes |
No |
プログラム lint1 にオプション x を渡す |
-qoption iropt x |
Yes |
Yes |
Yes |
プログラム iropt にオプション x を渡す |
-qoption cg x |
Yes |
Yes |
Yes |
プログラム cg にオプション x を渡 |
-qoption inline x |
Yes |
Yes |
No |
プログラム inline にオプション x を渡す |
-qoption cat x |
Yes |
Yes |
No |
プログラム cat にオプション x を渡す |
-qoption c2 x |
Yes |
Yes |
No |
プログラム c2 にオプション x を渡す |
-qoption as x |
Yes |
Yes |
No |
プログラム as にオプション x を渡す |
-qoption asS x |
Yes |
Yes |
No |
プログラム asS にオプション x を渡す |
-qoption ld x |
Yes |
Yes |
Yes |
プログラム ld にオプション x を渡す |
-Qproduce .o |
Yes |
Yes |
Yes |
形式 .o ファイルの生成 (オブジェクトファイル) |
-Qproduce .s |
Yes |
Yes |
Yes |
形式 .s ファイルの生成 (アセンブラソース) |
-Qproduce .c |
Yes |
Yes |
No |
形式 .c ファイルの生成 (C ソース) |
-Qproduce .i |
Yes |
Yes |
Yes |
形式 .i ファイルの生成 (cpp 後の C ソース) |
-qproduce .o |
Yes |
Yes |
Yes |
形式 .o ファイルの生成 (オブジェクトファイル) |
-qproduce .s |
Yes |
Yes |
Yes |
形式 .s ファイルの生成 (アセンブラソース) |
-qproduce .c |
Yes |
Yes |
No |
形式 .c ファイルの生成 (C ソース) |
-qproduce .i |
Yes |
Yes |
Yes |
形式 .i ファイルの生成 (cpp 後の C ソース) |
-r |
Yes |
Yes |
No |
再配置可能にしてリンカに渡す |
-R |
Yes |
Yes |
No |
テキストセグメントにデータをマージする |
-R |
No |
No |
Yes |
実行時リンカに対する検索ディレクトリの指定 |
-S |
Yes |
Yes |
+Yes |
.s ファイルのみを生成 |
-s |
Yes |
Yes |
Yes |
Strip (4.1)。リンカに渡す |
-sb |
Yes |
Yes |
-xsb |
コードブラウザのための情報の収集 |
-strconst |
No |
Yes |
No |
文字列リテラルを読み出し専用データセグメントに置く |
-sun2 |
Yes |
No |
No |
Sun-2TM システム用のコードの生成 |
-sun3x |
Yes |
No |
No |
Sun-3x システム用のコードの生成 |
-sun386 |
Yes |
No |
No |
Sun386iTM システム用のコードの生成 |
-sun3 |
Yes |
No |
No |
Sun-3TM システム用のコードの生成 |
-sun4c |
Yes |
No |
No |
Sun-4cTM システム用のコードの生成 |
-sun4 |
Yes |
No |
No |
Sun-4TM システム用のコードの生成 |
-target |
Yes |
No |
-xtarget |
ターゲットアーキテクチャを x に設定 |
-temp=dir |
Yes |
Yes |
Yes |
temps のディレクトリを dir に設定 |
-time |
Yes |
Yes |
Yes |
実行回数を報告 |
-u |
Yes |
Yes |
No |
シンボル引数を undef(ld) として入力 |
-Ux |
Yes |
Yes |
+Yes |
cpp シンボル x の定義解除 |
-v |
Yes |
Yes |
Yes |
詳細モード |
-v |
No |
No |
Yes |
厳密なセマンティクスチェック |
-V |
Yes |
Yes |
+Yes |
プログラムのバージョンの報告 |
-W |
No |
No |
No |
他のコンポーネントへの引数 |
-w |
Yes |
Yes |
Yes |
警告を出力しない |
-X[t,a,c,s] |
No |
Yes |
No |
互換性オプション |
-Y |
No |
No |
No |
パス名を構成要素に変更 |
-yx |
Yes |
No |
No |
シンボルの追跡 |
-z |
-assert |
-assert |
No |
リンカで assert をオンにする |
-# |
-v |
-v |
No |
詳細モード |
-EOF |
No |
No |
No |
ファイル引数 |
C コンパイラには 表 15-2 に示すような形式のファイル名引数を使用できます。
表 15-2 C コンパイラによって使用されるファイル名拡張子
接尾辞 |
ファイル形式 |
---|---|
.a |
オブジェクトライブラリ |
.il |
インライン展開ファイル |
.o |
オブジェクトファイル |
.so |
共有オブジェクト |
.s |
アセンブラソース |
.S |
cpp 用のアセンブラソース |
.c |
C ソース |
.i |
cpp 後の C ソース |
「file.X=.Y」はファイル 「file.X」を読み込みますが、接尾辞「Y」があるかのようにそのファイルを扱います。