[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6 GNU CC を VMS にインストール

VMS 版の GNU CC は、ソースコードとコンパイル済みバイナリの双方を 含むバックアップ・セーブセットで配布されている。

gcc’ コマンドを、VMS C コンパイラと同じ方法で、 簡単に使えるようにインストールするには、GNU CC 用の VMS CLD ファイルを 以下のようにインストールしなければならない。

  1. VMS の論理名 ‘GNU_CC’ と ‘GNU_CC_INCLUDE’ を定義し、 GNU CC の実行形式(‘gcc-cpp.exe’、‘gcc-cc1.exe’、等)と C のインクルードファイルが置かれているディレクトリをそれぞれ 指すようにする。これには、
     
    $ assign /system /translation=concealed -
      disk:[gcc.] gnu_cc
    $ assign /system /translation=concealed -
      disk:[gcc.include.] gnu_cc_include
    

    というコマンドに適切なディスク名とディレクトリ名を指定する。 これらのコマンドを読者のシステム起動ファイルに入れておけば、 リブート時に常に実行されるようにすることができる。 読者が望むなら、‘[GCC]’ ディレクトリに置いた ‘GCC_INSTALL.COM’ スクリプトを経由して行なうことも出来る。

  2. GCC’ コマンドを以下のコマンド行でインストールする。
     
    $ set command /table=sys$common:[syslib]dcltables -
      /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
    $ install replace sys$common:[syslib]dcltables
    
  3. 以下のようにして、ヘルプファイルをインストールする。
     
    $ library/help sys$library:helplib.hlb gcc.hlp
    

    これで、GNU CC を ‘gcc /verbose file.c’ のようなコマンド行で 起動できるようになったはずである。これは Unix の場合の ‘gcc -v -c file.c’ というコマンドに同じである。

GNU C++ を使う場合には、まず GNU CC をインストールしておいてから、 以下の段階を踏まなければならない。

  1. This can be done with the command: VMS 論理名 ‘GNU_GXX_INCLUDE’ を定義し、プリプロセッサが C++ の ヘッダファイルを検索するディレクトリを指すようにする。 このためには以下のコマンドを実行する。
     
    $ assign /system /translation=concealed -
      disk:[gcc.gxx_include.] gnu_gxx_include
    

    ここで適切なディスク名とディレクトリ名を指定する。 C++ 実行時ライブラリを使うなら、ここがそのライブラリのインストール手続により ヘッダファイルがインストールされる場所である。

  2. gcc-cc1plus.exe’ というファイルを入手し、‘gcc-cc1.exe’ が 置かれているディレクトリにこれを置く。

    これで GNU C++ コンパイラは ‘gcc /plus /verbose file.cc’ のような コマンドで起動できるようになる。これは Unix の場合の ‘g++ -v -c file.cc’ と同じである。

我々は、バージョンが対応しているバイナリとソースを VMS 用の配布テープに入れるように している。だが、時々バイナリがソースよりも古いバージョンになってしまう ことがある。常に更新するようにする時間がないためである。 (‘/version’ オプションを使ってバイナリのバージョンを知ったうえで、 ソースファイルの中の ‘version.c’ と比較すると、バイナリとソースの 同期が取れているかどうかが判る。) バイナリの方が古い場合は、そのバイナリを使って、ソースコードから 再コンパイルした方が良い。再コンパイルしなければならないようなら、 以下の手順に従うこと。

  1. コマンド・プロシージャ ‘vmsconfig.com’ を実行して、 ‘tm.h’、‘config.h’、‘aux-output.c’、‘md.’ という ファイルを設定し、‘tconfig.h’ と ‘hconfig.h’ を作る。 また、このプロシージャは、‘make-cc1.com’ が使用するたくさんの リンカ・オプション・ファイルと、‘make-l2.com’ が使用する 一個のデータファイルを作成する。
     
    $ @vmsconfig.com
    
  2. 上で定義された論理名とコマンドテーブルを設定する。 さらに、VMS 論理名 ‘GNU_BISON’ を定義し、 Bison の実行形式が置かれているディレクトリを指すようにする。 このためには以下のコマンドを実行する。
     
    $ assign /system /translation=concealed -
      disk:[bison.] gnu_bison
    

    読者が選ぶなら、‘BISON’ ディレクトリにある ‘INSTALL_BISON.COM’ スクリプトを使っても良い。

  3. BISON’ コマンドを以下のコマンド行でインストールする。
     
    $ set command /table=sys$common:[syslib]dcltables -
      /output=sys$common:[syslib]dcltables -
      gnu_bison:[000000]bison
    $ install replace sys$common:[syslib]dcltables
    
  4. 全てを再コンパイルするために ‘@make-gcc’ と打つ (あるいは、ファイル ‘make-gcc.com’ をバッチ・キューに投入する)。 GNU CC コンパイラだけでなく GNU C++ コンパイラも構築したければ、 最初に ‘make-gcc.com’ を編集して、コメントに書かれている操作に 従う必要がある。
  5. GCC を使うためには、GCC でコンパイルされたコードから呼び出され、 ある特定の作業を行う関数ライブラリが必要である。 これをコンパイルするには、コマンド・プロシージャ ‘make-l2.com’ を 使う必要がある。これを使うとライブラリ ‘libgcc2.olb’ を生成する。 ‘libgcc2.olb’ は、‘libgcc2.c’ の出所と同じディストリビューション から構築された GCC を使って構築する必要がある。‘make-gcc.com’ は、 このために必要なことを全て自動的に行う。

    このライブラリをインストールするには、以下のコマンドを使う。

     
    $ 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’ から 来るモジュールで置き換えられる古いモジュールを単に消去する。 モジュール neweprintf は、読者の ‘gcclib.olb’ には 実際には存在しないかもしれない。VMS のライブラリアンがこれらのモジュール が存在しないと文句を言った場合は、単にそのメッセージを無視して、 次のコマンドを続けること。第二のコマンドは、‘libgcc2.c’ ライブラリの 以前のバージョンから来るモジュールを消去する。

    読者のシステムの GNU CC を更新したときはいつでも、このライブラリも 上記のプロシージャで更新しなければならない。

  6. GCC を構築するのに、ソースファイルのあるディレクトリには何もファイルを 作りたくないこともあるだろう。例えば、ソースファイルが読みだし専用ディスク 上にある場合が該当するだろう。そう言う場合は、以下の DCL コマンドを 実行する(読者のところの実際のパス名に置き換えること)。
     
    $ 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’ はルート起点の論理名であり、そのため 検索リストの各要素に入っているデバイス名は、何か別のルート起点論理名 ではなく実際の物理デバイス名でなくてはならないことに注意。)

  7. GNU CC を以前のバージョン GNU CC で作ろうとしているなら、 GNU アセンブラの最新版を使っているかどうかも確かめなければならない。 特に、GNU CC バージョン 2 はグローバル定数変数の取扱いが、 GNU CC バージョン 1 と微妙に異なり、GAS バージョン 1.38.1 には、 GCC バージョン 2 と共に動作させるのに必要なパッチが存在しない。 GAS 1.38.1 を使うと、extern const 宣言された変数には、 読みだし専用ビットが設定されず、リンカが、そういう変数に対し、psect 属性が 一致しないという警告メッセージを出す。 この警告メッセージは単に邪魔なだけであり、無視して良い。

    GNU CC の 1.33 以前のバージョンでコンパイルする場合は、全てのコンパイル でオプションとして ‘/DEFINE=("inline=")’ を指定すること。 このためには、‘make-cc1.com’ に現れる全ての gcc コマンドを 編集する必要がある。(古いバージョンには inline のサポートに 問題があったのである。)一度 1.33 以降の GNU CC が動くようになれば、 このファイルを元に戻すことが出来る。

  8. GNU CC を VAX C コンパイラで構築したい場合は、‘make-cccp.com’ と ‘make-cc1.com’ にちょっと変更を加えて、CCCFLAGSLIBS の別の定義を選ぶ必要がある。これらのファイル中の コメントを参照のこと。ただし、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’ の中の CCCFLAGSLIBS の定義 を元に戻すのを忘れないこと。二代目のコンパイラは、他のコンパイラで 構築しているときには抑止しなくてはならなかった多数の最適化の利点を 享受することができる。

以前のバージョンの 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.