FreePascal/OpenCOBOLのインストール
FreePascal
CentOS4にFreePascalをインストールしてみましょう。CentOS4は基本的にRed Hat Linux Enterprise 4の互換ディストリビューションなので、「el4」のついたrpmがそのまま使えるはずです。
rpm -ivh fpc-2.0.2-3.el4.kb.i386.rpm
これでインストール完了です。え!?簡単すぎるって?いや、コンパイル済みパッケージが使えるなら使うべきです。もちろん、apacheや、PostgreSQLや、MySQLみたいなセキュリティパッチが頻繁に発生しているサーバーは今現在の最新のソース(.tar.gz)をコンパイルして使うべきですが、コンパイラにそこまで気にする必要もないでしょう。
さっそくコンパイルができるかどうかテストしてみましょう。PASCALのソースは一般的に.pasを使います。
vi hello.pas
rpm -ivh fpc-2.0.2-3.el4.kb.i386.rpm
これでインストール完了です。え!?簡単すぎるって?いや、コンパイル済みパッケージが使えるなら使うべきです。もちろん、apacheや、PostgreSQLや、MySQLみたいなセキュリティパッチが頻繁に発生しているサーバーは今現在の最新のソース(.tar.gz)をコンパイルして使うべきですが、コンパイラにそこまで気にする必要もないでしょう。
さっそくコンパイルができるかどうかテストしてみましょう。PASCALのソースは一般的に.pasを使います。
vi hello.pas
program HELLO; begin writeln('HELLO'); end.
コンパイルオプションは特に何も指定しないと、同名の拡張子なしのファイル名で実行形式ファイルを生成します。-oオプションで実行形式ファイルのファイル名を指定する事もできます。-oとファイル名の間にスペースを空けてはいけません。
fpc hello.pas -ohello
./hello
これでHELLOと表示されれば成功です。
fpc hello.pas -ohello
./hello
これでHELLOと表示されれば成功です。
OpenCOBOL
オープンソースのCOBOLコンパイラをCentOS4にインストールしてみます。コンパイル済みパッケージを探した所、open-cobol-0.9.7-1.i386.rpmというファイルがありました。しかし、
rpm -ivh open-cobol-0.9.7-1.i386.rpm
だとエラーが発生してCentOS4では動きませんでした。まずインストール時にlibdb-3.2.soがないという理由でインストールできません。CentOSのCDに入っているlibdbとはバージョンが異なるためです。そのため、旧バージョンcompat-db-4.1.25-2.1.i386.rpmを探してきてインストールしてみたのですが、
rpm -ivh open-cobol-0.9.7-1.i386.rpm compat-db-4.1.25-2.1.i386.rpm
だとインストールできますが、実行ファイルがどうしてもエラーになってしまい実行できませんでした。おそらくライブラリのバージョンが違うだめと思われます。
こういう時はrpmをあきらめて素直にソースをコンパイルしてインストールします。え!?もう説明された通りにインストールしちゃったって??そういう人は、
rpm -e open-cobol-0.9.7-1.i386
rpm -e compat-db-4.1.25-2.1.i386
で削除しておいてください。その後、ログアウトしてログインしなおします。そして、ソースopen-cobol-1.0.tar.gz をGoogle等でどこからか検索してきて、サーバーにFTPで転送しておいてください。
rpm -ivh open-cobol-0.9.7-1.i386.rpm
だとエラーが発生してCentOS4では動きませんでした。まずインストール時にlibdb-3.2.soがないという理由でインストールできません。CentOSのCDに入っているlibdbとはバージョンが異なるためです。そのため、旧バージョンcompat-db-4.1.25-2.1.i386.rpmを探してきてインストールしてみたのですが、
rpm -ivh open-cobol-0.9.7-1.i386.rpm compat-db-4.1.25-2.1.i386.rpm
だとインストールできますが、実行ファイルがどうしてもエラーになってしまい実行できませんでした。おそらくライブラリのバージョンが違うだめと思われます。
こういう時はrpmをあきらめて素直にソースをコンパイルしてインストールします。え!?もう説明された通りにインストールしちゃったって??そういう人は、
rpm -e open-cobol-0.9.7-1.i386
rpm -e compat-db-4.1.25-2.1.i386
で削除しておいてください。その後、ログアウトしてログインしなおします。そして、ソースopen-cobol-1.0.tar.gz をGoogle等でどこからか検索してきて、サーバーにFTPで転送しておいてください。
tar xvzf open-cobol-1.0.tar.gz
cd open-cobol-1.0
./configure
make
make install
cd open-cobol-1.0
./configure
make
make install
このままではlibcob.so.1がライブラリ登録されてないので実行ファイルが動作しません。
vi /etc/profile.d/opencobol.sh
vi /etc/profile.d/opencobol.sh
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":/usr/local/lib/
/etc/profile.d/に登録したスクリプトは、あくまでログインした時やsuコマンドでユーザーを変更した時に実行されるものです。そのため、いったんログアウトして再ログインしていみましょう。もちろん、/etc/profile.d/opencobol.shを直接実行してもいいんですけど、ログイン時にちゃんとLD_LIBRARY_PATHが設定されるかのテストも兼ねてますので。
再ログインしたら、コンパイルを試してみます。
MicroFocusCOBOLでは中間コード(.INTや.GNT)をランタイムが実行する方式でしたが、(というか、これも内部では同様に中間コードを生成しているのだと思いますが)、Linux用のOpenCOBOLでは直接実行形式ファイルにする事ができます。
cobc オプション ファイル名
オプションは以下の通りです。
再ログインしたら、コンパイルを試してみます。
MicroFocusCOBOLでは中間コード(.INTや.GNT)をランタイムが実行する方式でしたが、(というか、これも内部では同様に中間コードを生成しているのだと思いますが)、Linux用のOpenCOBOLでは直接実行形式ファイルにする事ができます。
cobc オプション ファイル名
オプションは以下の通りです。
オプション | 意 味 |
---|---|
-C | Cのソースコードを生成します。 |
-c | オブジェクト(.oファイル)にします。 |
-x | 実行形式を生成します。 |
-free | 自由書式を指定します。 |
内部では、いったんCのソースコードを生成して、それをアセンブラのソースコードにして、それをオブジェクトにして、それを実行形式にするのですが、オプションを指定する事で途中の段階までで止める事ができるわけです。
-x を指定しないと、直接実行するファイル(拡張子なし)ではなく、ダイナミックリンク(.so)ファイルを生成します。
拡張子は、MicroFocusCOBOLでは.CBLでしたが、慣習的にFreeCOBOLでは.cobを使うようです。
vi hello.cob
-x を指定しないと、直接実行するファイル(拡張子なし)ではなく、ダイナミックリンク(.so)ファイルを生成します。
拡張子は、MicroFocusCOBOLでは.CBLでしたが、慣習的にFreeCOBOLでは.cobを使うようです。
vi hello.cob
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. WindowsXP. OBJECT-COMPUTER. CentOS4. INPUT-OUTPUT SECTION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. DISP-HELO. DISPLAY "HELLO". PRO-EN. STOP RUN.
cobc -x hello.cob
./hello
これで、HELLOと表示されたら成功です。
COBOL入門で説明した通り、COBOLは書式にうるさい言語で、何カラム目に何を書くかが決まっています。が、コンパイル時に-freeオプションをつける事でその制約は撤廃されます。ですよね。パンチカードじゃあるまいしソースのカラムを気にしながら書かないといけないなんてナンセンスです。
./hello
これで、HELLOと表示されたら成功です。
COBOL入門で説明した通り、COBOLは書式にうるさい言語で、何カラム目に何を書くかが決まっています。が、コンパイル時に-freeオプションをつける事でその制約は撤廃されます。ですよね。パンチカードじゃあるまいしソースのカラムを気にしながら書かないといけないなんてナンセンスです。
ご注意
IDENTIFICATION DIVISIONにAUTHORとDATE-WRITTENを書くと、なぜかまったく何も表示されません。というより、以降の行が全て無視されてしまいます。どうやら以降を全てコメントとみなされてしまうバグっぽいです。結局、以降の全ての記述がAUTHOR(作者名)DATE-WRITTEN.(日付)の続きとみなされてしまうのでしょう。
とはいえ、AUTHORとDATE-WRITTENは廃止要素なので、特に書かなくとも問題はないでしょう。
とはいえ、AUTHORとDATE-WRITTENは廃止要素なので、特に書かなくとも問題はないでしょう。
MicroFocus独自の書式が使えるかどうか
試しにMicroFocus独自の書式(DISPLAY AT 座標)を書いてみましょう。
(省略) DISPLAY "HELLO" AT 0303. (省略)
すると、画面がクリアされてちゃんと3ライン3カラム目にHELLOの文字が出るじゃありませんか。
というわけで、OpenCOBOLでもちゃんとMicroFocusCOBOL流の書式が通用したのでした。
まったく、誰ですか、ATのライン/カラム指定が「全く一般的じゃない」だの「これはオフコンであり」などという人は。
現在は、ユーザーインターフェイスは端末のWindows機ならVisualBasicのようにGUIの入力フォームを作成するし、 サーバー上ではCGIとして実行させてHTMLを吐くのが普通なのでライン/カラム指定をする必要はなくなりましたが、 GUIが普及する前は皆、このようにライン/カラムを指定して表示や入力をさせていたのです。 「全く一般的じゃない」とか言う人は、おそらく机の上の勉強ばっかりしてて現場を知らないんでしょう。
現在は、ユーザーインターフェイスは端末のWindows機ならVisualBasicのようにGUIの入力フォームを作成するし、 サーバー上ではCGIとして実行させてHTMLを吐くのが普通なのでライン/カラム指定をする必要はなくなりましたが、 GUIが普及する前は皆、このようにライン/カラムを指定して表示や入力をさせていたのです。 「全く一般的じゃない」とか言う人は、おそらく机の上の勉強ばっかりしてて現場を知らないんでしょう。

広告