34.1.2 コンパイルとリンクを別々に実行する方法
COBOLプログラムが複数ある場合,あらかじめccbl2002コマンドでオブジェクトファイルを作成しておき,その後ccbl2002コマンドやccコマンドでオブジェクトファイルをリンクして実行可能ファイルを生成できます。
(1) ccbl2002コマンドによるリンク方法
ccbl2002コマンドでコンパイルとリンクを別々に実行する方法を,次に示します。
- ccbl2002コマンドの指定
-
まず,COBOLプログラム"test01.cbl"および"test02.cbl"をコンパイルし,オブジェクトファイルを生成します。コンパイルだけを実行し,リンクを実行しない場合は,ccbl2002コマンドに-Compile,NoLinkオプションを指定します。
ccbl2002 -Main,System test01.cbl -Compile,NoLink ccbl2002 test02.cbl -Compile,NoLink
次に,生成された"test01.o"および"test02.o"をccbl2002コマンドを使用してリンクします。
ccbl2002 test01.o test02.o -OutputFile test03
上記のコマンドを実行すると,実行可能ファイル"test03"が生成されます。
(2) ccコマンドによるリンク方法
ccコマンドでコンパイルとリンクを別々に実行する方法を,次に示します。
- ccbl2002コマンドの指定
-
まず,COBOLプログラム"test01.cbl"および"test02.cbl"をコンパイルし,オブジェクトファイルを生成します。コンパイルだけを実行し,リンクを実行しない場合は,ccbl2002コマンドに-Compile,NoLinkオプションを指定します。
ccbl2002 -Main,System test01.cbl test02.cbl -Compile,NoLink
次に,生成された"test01.o"および"test02.o"をccコマンドを使用してリンクします。
cc test01.o test02.o -o test03 -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lm
上記のコマンドを実行すると,実行可能ファイル"test03"が生成されます。
- 注
-
-Lオプションに指定する検索パスや-lオプションに指定するライブラリ名については,「34.1.5 ccコマンドおよびldコマンドの-lオプション」の「(1) COBOL2002実行時ライブラリを使用する場合」を参照してください。
(3) 注意事項
(a) AIXシステムで,オブジェクトファイルを指定して実行可能ファイルを作成する場合の注意事項
-
ccbl2002コマンドでリンクするとき
AIX COBOL2002 V3以前に作成したCOBOLオブジェクトファイル,-OldStyleObjectオプションを指定して作成したCOBOLオブジェクトファイル,Cプログラムのオブジェクトファイルを混在させるときは,-OldLinkOpt,GCBypassオプションを指定してください。-OldLinkOpt,GCBypassオプションの詳細は,「32.5.10 リンクの設定」の「(5) -OldLinkOpt,GCBypassオプション(AIXで有効)」を参照してください。
-
cc/ldコマンドでリンクするとき
AIXシステムでは,静的な参照関係がないファイルは,cc/ldコマンドで特にリンカオプションを指定しないと,リンク対象となりません。そのため,AIX COBOL2002 V3以前に作成したCOBOLオブジェクトファイル,-OldStyleObjectオプションを指定して作成したCOBOLオブジェクトファイル,Cプログラムのオブジェクトファイルをリンクする場合,静的な参照関係がないファイルは,リンク対象とならないことがあります。
静的な参照関係がないファイルもリンク対象とするときは,次のどれかのリンカオプションを指定してください。
-
-bgcbypassリンカオプション(-bgcbypass:入力ファイル数)
-
-bkeepfileリンカオプション(-bkeepfile:入力ファイル名)
-
-uリンカオプション(-u プログラム名)
-
(b) AIXシステムで,アーカイブファイルを指定して実行可能ファイルを作成する場合の注意事項
-
AIX COBOL2002 V4で作成したオブジェクトファイルを含むアーカイブファイルを指定して実行可能ファイルを作成すると,実行可能ファイルのサイズが,AIX COBOL2002 V3以前に作成した実行可能ファイルのサイズと比べて,極端に肥大化することがあります。このサイズの肥大化は,-OldStyleObjectオプションで回避できます。-OldStyleObjectオプションの詳細,およびサイズの肥大化については,「32.5.10 リンクの設定」の「(6) -OldStyleObjectオプション(AIXで有効)」を参照してください。
-
アーカイブファイル内の静的な参照関係がないオブジェクトファイルは,特にリンカオプションの指定がないと,リンク対象となりません。アーカイブファイル内の静的な参照関係がないオブジェクトファイルをリンク対象とするときは,次のどちらかのリンカオプションを指定してください。
-
アーカイブファイル内のすべてのオブジェクトファイルをリンク対象とするとき
-bkeepfile:アーカイブファイル名
-
アーカイブファイル内の特定のプログラムのオブジェクトファイルだけをリンク対象とするとき
-u プログラム名
-
(c) Linuxシステムでの注意事項
-
Linux(x86) COBOL2002で生成したオブジェクトを,ccコマンドを使用してリンクする場合,32bitアプリケーションとしてリンクしなければなりません。OSがLinux(x64)の場合は,-m32オプションの指定が必要です。なお,ccコマンドのオプションの詳細は,システムのマニュアルを参照してください。