Solaris 2.x への移行

コンパイラ

SunOS 4.x から Solaris 2.6 に移行する開発者にとって最も大きな変更点は、C コンパイラがバンドルされなくなったことです。コンパイラをバンドルしない理由の 1 つに、動的なカーネルがあります。動的なカーネルでは、必要に応じて自動的にデバイスが追加されるので、カーネルの再構築にコンパイラを使用する必要がありません。

ANCI C コンパイラは、アンバンドル製品の Sun WorkShopTMに含まれています。このコンパイラ製品は、Solaris 2.6 のオブジェクト形式である ELF 形式で実行可能ファイルを作成します。lintlint ライブラリもアンバンドルです。

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』に基づく情報を示します。


次の点に注意してください。

表 15-1 C コンパイラオプションの比較

オプションまたはフラグ 

Sun C 

ANSI C 

Sun WorkShop C++ 4.2 

説明 

-A symbol

No 

Yes 

Yes 

cppassert を含む

-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

-fastlibm.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」があるかのようにそのファイルを扱います。