COBOL2002 使用の手引 操作編


2.4.5 共用ライブラリ

〈この項の構成〉

(1) コンパイルと実行

テストデバッグで共用ライブラリを使用するときは,-PIC,Std,および-TDInfコンパイラオプションを指定してプログラムをコンパイルします。コンパイラオプションについては,マニュアル「COBOL2002 使用の手引 手引編」を参照してください。

AIXの場合,arコマンドでアーカイブファイルとした共用ライブラリ中のサブプログラムを,テストデバッグ対象に指定できます。arコマンドについては,システムのリファレンスマニュアルを参照してください。

共用ライブラリファイルは,cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションでパスのないファイル名を指定した場合,次の順序で検索します。検索した結果,目的のファイルが見つからないときは,テストデバッグの対象となりません。

AIXの場合
  • 環境変数CBLLSLIBの指定がある場合

    cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションで指定したファイル名と同一名称のファイル名が,パスプレフィクス付きで環境変数CBLLSLIBに指定されていれば,そのパスだけが検索されます。同一名称のファイル名が指定されていない,またはパスプレフィクスなしで指定されているときは,次の項目のとおりに検索します。

  • 環境変数CBLLPATHの指定がある場合

    指定されているパス,カレントディレクトリの順序で検索します。

  • 環境変数が何も指定されていない場合

    カレントディレクトリを検索します。

Linuxの場合
  • 環境変数CBLLSLIBの指定がある場合

    cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションで指定したファイル名と同一名称のファイル名が,パスプレフィクス付きで環境変数CBLLSLIBに指定されていれば,そのパスだけが検索されます。同一名称のファイル名が指定されていない,またはパスプレフィクスなしで指定されているときは,次の項目のとおりに検索します。

  • 環境変数LD_LIBRARY_PATHの指定がある場合

    指定されているパスを検索します。カレントディレクトリを検索する場合も,この環境変数LD_LIBRARY_PATHに指定しておく必要があります。

  • 環境変数が何も指定されていない場合

    cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションで指定したファイルはテスト対象になりません。環境変数CBLLSLIBまたはLD_LIBRARY_PATHを指定する必要があります。

検索についての注意事項(AIXの場合)

環境変数LIBPATHに指定されているパスは検索されません。この環境変数で共用ライブラリの検索パスを指定している場合は,-Libraryオプションにパスプレフィクスを付けて指定する必要があります。

注意事項

  1. AIXの場合の注意事項を次に示します。

    • arコマンドでアーカイブファイルとして作成した共用ライブラリ中に,同じ名称のメンバ(共用オブジェクト)が複数あるときは,KCCC4251T-Wメッセージを出力し,先に配置されているメンバ(共用オブジェクト)をテストデバッグ対象とします。

    • -Lおよび-lオプションを指定して共用ライブラリをリンケージしたプログラムを実行し,-DynamicLink,Callまたは-DynamicLink,IdentCallコンパイラオプションを指定して再びリンケージした場合,この共用ライブラリをテストデバッグの対象とできない場合があります。その場合は,次のどちらかの指定をします。

      ・共用ライブラリの検索ディレクトリ指定の,-Lオプションと同じディレクトリを,環境変数CBLLPATHに指定。

      ・-Lオプションと同じディレクトリを指定した共用ライブラリファイルを,環境変数CBLLSLIBに指定。

    • アーカイブファイルの中に含まれるアーカイブファイルは,テストデバッグ対象になりません。

    • メッセージでアーカイブファイル名を表示する場合は,ファイル名を次の形式で出力します。

      アーカイブファイル名〔メンバ名〕

      (例)アーカイブファイル名が/usr/test/usersub.a,メンバ名がsub1.oの場合

      KCCC1203T-I ユーザプログラムのライブラリファイルがロードされました。

             ファイル(/usr/test/usersub.a〔sub1.o〕)

    • 環境変数CBLLTAGによる検索動作の指定は,デバッガでは有効になりません。

  2. 遅延ロードされる共用ライブラリはテストデバッグの対象になりません。遅延ロードについては,システムのマニュアルを参照してください。

  3. ldコマンドの-sオプションやstripコマンドなどで共用ライブラリのシンボル情報を削除した場合,その共用ライブラリは,テストデバッグの対象になりません。

    なお,Linuxでは,cbltd2kコマンドやcbltl2kコマンドの-Executeオプションに指定する実行可能ファイルは,テストデバッグの対象にしない場合でもシンボル情報が必要です。

使用例1

ccbl2002コマンドに-Lおよび-lオプションを使用して実行可能ファイルを作成します。

  1. sub1.cblをコンパイルする。

    AIXの場合

    ccbl2002 -PIC,Std -TDInf sub1.cbl

    Linuxの場合

    ccbl2002 -PIC,Std -TDInf -UniObjGen sub1.cbl
  2. 共用ライブラリを作成する。

    AIX(32)の場合

    ld -o libsub1.a sub1.o -bpT:0x10000000 -bpD:0x20000000
     -bnoentry -bM:SRE -bexpall -L/opt/HILNGcbl2k/lib -lcbl2k
     -lcbl2kml -lm -lc

    AIX(64)の場合

    ld -o libsub1.a sub1.o -b64 -bpT:0x100000000 -bpD:0x110000000
     -bnoentry -bM:SRE -bexpall -L/opt/HILNGcbl2k64/lib -lcbl2k64
     -lcbl2kml64 -lm -lc

    Linux(x86)の場合

    ld -shared -o libsub1.so sub1.o -Bstatic -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

    Linux(x64)の場合

    ld -shared -o libsub1.so sub1.o -Bstatic -L/opt/HILNGcbl2k64/lib -lcbl2kml -Bdynamic -lc
  3. -Lおよび-lオプションで共用ライブラリを指定して,実行可能ファイルを作成する。-Lおよび-lオプションについては,システムの規則に従ってください。

    AIXの場合

    ccbl2002 -TDInf main1.cbl -L ./ -lsub1 -OutputFile a.out

    Linuxの場合

    ccbl2002 -TDInf -UniObjGen main1.cbl -L ./ -lsub1 -OutputFile a.out
  4. -Libraryオプションを指定してテストデバッグを開始する。

    AIXの場合

    cbltl2k -Library libsub1.a -Execute a.out

    Linuxの場合

    cbltl2k -Library libsub1.so -Execute a.out
使用例2

ccbl2002コマンドの-DynamicLink,Callコンパイラオプションを使用して実行可能ファイルを作成します。

  1. 使用例1の1.および2.と同様の手順で,sub1.cblに-TDInfコンパイラオプションを指定してコンパイルし,共用ライブラリを作成する。

  2. -DynamicLink,Callコンパイラオプションを指定して実行可能ファイルを作成する。

    AIXの場合

    ccbl2002 -DynamicLink,Call -TDInf main1.cbl -OutputFile a.out

    Linuxの場合

    ccbl2002 -DynamicLink,Call -TDInf -UniObjGen main1.cbl -OutputFile a.out
  3. 使用例1の4.と同様の手順で,-Libraryオプションを指定してテストデバッグを開始する。

使用例3

ccbl2002コマンドの-DynamicLink,IdentCallコンパイラオプションを使用して実行可能ファイルを作成します。

  1. 使用例1の1.および2.と同様の手順で,sub1.cblに-TDInfコンパイラオプションを指定してコンパイルし,共用ライブラリを作成する。

  2. -DynamicLink,IdentCallコンパイラオプションを指定して実行可能ファイルを作成する。

    AIXの場合

    ccbl2002 -DynamicLink,IdentCall -TDInf main1.cbl -OutputFile a.out

    Linuxの場合

    ccbl2002 -DynamicLink,IdentCall -TDInf -UniObjGen main1.cbl -OutputFile a.out
  3. 使用例1の4.と同様の手順で,-Libraryオプションを指定してテストデバッグを開始する。

(2) -TDInfおよび-CVInfコンパイラオプションがないCOBOLプログラム,またはCOBOLプログラム以外から共用ライブラリを呼ぶ場合

-TDInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムが呼び出すときに,テストデバッグができない場合があります。

このような場合にテストデバッグを可能とする環境変数CBLTDEXTARGETについて説明します。

環境変数

CBLTDEXTARGET

形式
CBLTDEXTARGET=YES
export CBLTDEXTARGET
機能

-TDInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムが呼ぶ場合に,テストデバッグができます。

  • -TDInfおよび-CVInfコンパイラオプションの指定がないCOBOLプログラム

  • COBOLプログラムを含まない実行可能ファイル

注意事項
  1. 環境変数CBLTDEXTARGETは,テストデバッガを使用するときに有効になります。運用環境では指定しないでください。

  2. 環境変数CBLTDEXTARGETを指定したときは,テスト対象のプロセスの情報を収集する回数が増加するため,処理速度が低下することがあります。テストデバッグ終了した部分は,-TDInfコンパイラオプションを外して再コンパイル後にテストデバッガでテストしてください。

  3. 次のディレクトリに格納した共用ライブラリは,テストデバッグの対象にできません。

    AIX(32)およびLinux(x86)の場合

    /usr/lib,/lib

    /opt/HILNGcbl2k/lib

    AIX(64)の場合

    /usr/lib,/lib

    /opt/HILNGcbl2k64/lib

    Linux(x64)の場合

    /usr/lib64,/lib64

    /opt/HILNGcbl2k64/lib

  4. 環境変数CBLTDEXTARGETの値にYES以外を指定した場合,環境変数CBLTDEXTARGETの指定は無効となります。

  5. テストデバッグを実行する前に,環境変数CBLTDEXTARGETを設定する必要があります。プログラムの連動実行時をするときは,プログラムを実行する前に環境変数CBLTDEXTARGETを設定する必要があります。