[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
VMS 版の GNU CC は、ソースコードとコンパイル済みバイナリの双方を 含むバックアップ・セーブセットで配布されている。
‘gcc’ コマンドを、VMS C コンパイラと同じ方法で、 簡単に使えるようにインストールするには、GNU CC 用の VMS CLD ファイルを 以下のようにインストールしなければならない。
$ assign /system /translation=concealed - disk:[gcc.] gnu_cc $ assign /system /translation=concealed - disk:[gcc.include.] gnu_cc_include |
というコマンドに適切なディスク名とディレクトリ名を指定する。 これらのコマンドを読者のシステム起動ファイルに入れておけば、 リブート時に常に実行されるようにすることができる。 読者が望むなら、‘[GCC]’ ディレクトリに置いた ‘GCC_INSTALL.COM’ スクリプトを経由して行なうことも出来る。
$ set command /table=sys$common:[syslib]dcltables - /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc $ install replace sys$common:[syslib]dcltables |
$ library/help sys$library:helplib.hlb gcc.hlp |
これで、GNU CC を ‘gcc /verbose file.c’ のようなコマンド行で 起動できるようになったはずである。これは Unix の場合の ‘gcc -v -c file.c’ というコマンドに同じである。
GNU C++ を使う場合には、まず GNU CC をインストールしておいてから、 以下の段階を踏まなければならない。
$ assign /system /translation=concealed - disk:[gcc.gxx_include.] gnu_gxx_include |
ここで適切なディスク名とディレクトリ名を指定する。 C++ 実行時ライブラリを使うなら、ここがそのライブラリのインストール手続により ヘッダファイルがインストールされる場所である。
これで GNU C++ コンパイラは ‘gcc /plus /verbose file.cc’ のような コマンドで起動できるようになる。これは Unix の場合の ‘g++ -v -c file.cc’ と同じである。
我々は、バージョンが対応しているバイナリとソースを VMS 用の配布テープに入れるように している。だが、時々バイナリがソースよりも古いバージョンになってしまう ことがある。常に更新するようにする時間がないためである。 (‘/version’ オプションを使ってバイナリのバージョンを知ったうえで、 ソースファイルの中の ‘version.c’ と比較すると、バイナリとソースの 同期が取れているかどうかが判る。) バイナリの方が古い場合は、そのバイナリを使って、ソースコードから 再コンパイルした方が良い。再コンパイルしなければならないようなら、 以下の手順に従うこと。
$ @vmsconfig.com |
$ assign /system /translation=concealed - disk:[bison.] gnu_bison |
読者が選ぶなら、‘BISON’ ディレクトリにある ‘INSTALL_BISON.COM’ スクリプトを使っても良い。
$ set command /table=sys$common:[syslib]dcltables - /output=sys$common:[syslib]dcltables - gnu_bison:[000000]bison $ install replace sys$common:[syslib]dcltables |
このライブラリをインストールするには、以下のコマンドを使う。
$ library gnu_cc:[000000]gcclib/delete=(new,eprintf) $ library gnu_cc:[000000]gcclib/delete=L_* $ library libgcc2/extract=*/output=libgcc2.obj $ library gnu_cc:[000000]gcclib libgcc2.obj |
最初のコマンドは、別のモジュール名で置かれる ‘libgcc2’ から
来るモジュールで置き換えられる古いモジュールを単に消去する。
モジュール new
と eprintf
は、読者の ‘gcclib.olb’ には
実際には存在しないかもしれない。VMS のライブラリアンがこれらのモジュール
が存在しないと文句を言った場合は、単にそのメッセージを無視して、
次のコマンドを続けること。第二のコマンドは、‘libgcc2.c’ ライブラリの
以前のバージョンから来るモジュールを消去する。
読者のシステムの GNU CC を更新したときはいつでも、このライブラリも 上記のプロシージャで更新しなければならない。
$ assign dua0:[gcc.build_dir.]/translation=concealed, - dua1:[gcc.source_dir.]/translation=concealed gcc_build $ set default gcc_build:[000000] |
ここで、ディレクトリ ‘dua1:[gcc.source_dir]’ にはソースコードが 置かれており、ディレクトリ ‘dua0:[gcc.build_dir]’ は 生成されるオブジェクトファイルと実行形式を全て置くディレクトリである。 一度こうしておけば、上に記述したように GCC の構築を進めることができる。 (‘gcc_build’ はルート起点の論理名であり、そのため 検索リストの各要素に入っているデバイス名は、何か別のルート起点論理名 ではなく実際の物理デバイス名でなくてはならないことに注意。)
extern const
宣言された変数には、
読みだし専用ビットが設定されず、リンカが、そういう変数に対し、psect 属性が
一致しないという警告メッセージを出す。
この警告メッセージは単に邪魔なだけであり、無視して良い。
GNU CC の 1.33 以前のバージョンでコンパイルする場合は、全てのコンパイル
でオプションとして ‘/DEFINE=("inline=")’ を指定すること。
このためには、‘make-cc1.com’ に現れる全ての gcc
コマンドを
編集する必要がある。(古いバージョンには inline
のサポートに
問題があったのである。)一度 1.33 以降の GNU CC が動くようになれば、
このファイルを元に戻すことが出来る。
CC
、CFLAGS
、
LIBS
の別の定義を選ぶ必要がある。これらのファイル中の
コメントを参照のこと。ただし、GNU アセンブラ(GNU as, 別名 GAS)の
正しく動作するバージョンが、GNU CC のバックエンドとして、
バイナリのオブジェクトモジュールを生成するのに必要である。
GAS は GNU CC のソースには含まれていない。GAS は、‘libgcc2’ を
コンパイルして ‘gcclib’ を作るのにも必要である(上記参照)。
‘make-l2.com’ では、GAS が ‘gnu_cc:[000000]gnu-as.exe’ として
使える事を想定している。
GNU CC を VMS で使うには、VMS 用ドライバプログラム ‘gcc.exe’、 ‘gcc.com’、‘gcc.cld’ が必要である。これらは、GNU CC のソース ではなくて VMS 用バイナリ(‘gcc-vms’) に入って配布されている。 GAS、Bison も ‘gcc-vms’ に含まれている。
VAX C で GNU CC を構築するのに一度成功すれば、できたコンパイラを
使って自分自身を再構築した方が良い。その前に、‘make-cccp.com’ と
‘make-cc1.com’ の中の CC
、CFLAGS
、LIBS
の定義
を元に戻すのを忘れないこと。二代目のコンパイラは、他のコンパイラで
構築しているときには抑止しなくてはならなかった多数の最適化の利点を
享受することができる。
以前のバージョンの GNU CC では、生成されたコードを共有可能な ‘VAXCRTL’ ライブラリとリンクするとおかしな結果になることが ときどきあった。現在のバージョンでは正しく動作するはずである。
ただし、現在のバージョンでも、GNU CC 自体は共有可能な ‘VAXCRTL’ と
リンクすべきではない。‘VAXCRTL’ にあるバージョンの qsort
には
バグがあり(VMS バージョン V4.6 から V5.5 にかけて存在するのが知られている)、
GNU CC が正しく動作しない。
実行形式は、‘make-cc1.com’ と ‘make-cccp.com’ により、
‘VAXCRTL’ のバージョンのオブジェクトライブラリを使って
生成されることで、‘gcclib.olb’ にある qsort
ルーチンを使う
ようになる。GCC の実行形式を共有可能な ‘VAXCRTL’ とリンクしたければ、
ファイル ‘tm.h’(‘vmsconfig.com’ により作られる)を
編集して、マクロ QSORT_WORKAROUND
を定義する必要がある。
QSORT_WORKAROUND
は GNU CC を VAX C でコンパイルする場合は
常に定義されて、‘gcclib.olb’ がまだ利用可能でない場合の問題を
回避するようになっている。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated
using texi2html 1.78.