Technical FAQ - Server Express (プログラミング)
質問一覧:
2.1 日本語環境と英語環境
2.2 UNIXのリターン値はどんなエラーを返すか
2.3 共有ライブラリの作成
2.4 未解決参照の解決
2.1 日本語環境と英語環境
質問:
言語環境について日本語環境で作成したものを英語環境で使用できますか?
日本語環境下で開発したソースを英語環境化で運用する際に気をつけなくてはならないものはあるか?
回答・回避策:
ソース中で使用する日本語がコメントだけでしたら問題はありません。日本語の文字定数やデータ項目名は英語版ソフトウェアでは保証されません。なお、日本語版のCOBOL開発が終了した後、英語版のCOBOLで再コンパイルする必要があります。
2.2 UNIXのリターン値はどんなエラーを返すか
質問:
UNIX のリターン値は、どのようなエラーの時、どんな値をかえすか。
回答・回避策:
COBOLアプリケーションが異常終了した場合のシェルへのリターンコードは
システムエラー==>255
外部からの強制終了==>254
となっています。正常終了した場合は、プログラムの STOP RUN直前の特殊レジスタ RETURN-CODEの値が返されます。
なお、特殊レジスタ RETURN-CODE は埋め込みSQL文や、Cサブルーチンの呼び出しによって値が変更されることがあります。STOP RUNの直前で値を設定することを推奨します。
2.3 共有ライブラリーの作成
質問:
共有ライブラリの作成にcobコマンドは使用できるか。
回答・回避策:
共有ライブラリの生成方法には以下の2通りがあります。
1.-Z オプションによる生成
cobコマンドの−Zオプションにより生成が可能です。
以下に共有ライブラリを生成して動的リンクを行う例を示します。
例:
$ cat cobmain.cbl
procedure division.
1. display ""main started."".
call ""sub1"".
display ""back to main."".
stop run.
$ cat sub1.cbl
procedure division.
1. display ""sub1 is called."".
exit program.
$ cob -Zo libsub1.sl sub1.cbl
$ cob -x cobmain.cbl -L. -lsub1
$ ./cobmain
main started.
sub1 is called.
back to main.
$
この例では、COBOLサブルーチン sub1.cbl は共有ライブラリ libsub1.sl にリンクされており、メインプログラム cobmain.cbl はこの共有ライブラリを動的リンクしています。
2. -z (Cllable Shared Object)オプション によりGNT形式からの呼び出しが可能となるのも
-z オプションにより生成されるライブラリはGNT形式から動的にロード可能な共有ライブラリを生成します。
例:
$ cob -z sub.cbl
$ ls
cobmain.cbl sub.cbl sub.idy sub.int sub.o sub.so
$ cob -u cobmain.cbl
$ cobrun cobmain.gnt
main started
sub1 is called
back to main
$
2.4 未解決参照の解決
質問:
上記のCllable Shared Object を呼ぶメインを実行形式で生成したいのですが、できるのでしょか。
回答・回避策:
-U オプションにより生成することで、未解決のシンボルを動的にロードするとみなすことで解決します。
例:
$ cob -xU cobmain.cbl
Cobol プログラム "sub" が未定義。動的にロードされるものとみなす
$ ./cobmain
main started
sub1 is called
back to main
$
