COBOL2002 使用の手引 操作編


6.4.2 共用ライブラリ

〈この項の構成〉

(1) コンパイルと実行

カバレージ情報の蓄積・カウント情報の表示で共用ライブラリを使用するとき,-PIC,Std,および-CVInfコンパイラオプションを指定してプログラムをコンパイルします。コンパイラオプションについては,マニュアル「COBOL2002 使用の手引 手引編」を参照してください。

共用ライブラリファイルは,cblcv2kコマンドやcblcn2kコマンドの-Libraryオプションでパスの指定がないファイル名を指定した場合,次の順序で検索します。検索した結果,目的のファイルが見つからないときは,カバレージ情報を蓄積したりカウント情報を表示したりできません。

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

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

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

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

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

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

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

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

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

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

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

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

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

注意事項

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

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

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

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

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

    • アーカイブファイルの中に含まれるアーカイブファイルは,カバレージ情報の蓄積,カウント情報の表示の対象になりません。

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

  2. 遅延ロードされる共用ライブラリはカバレージ情報の蓄積,およびカウント情報の表示の対象となりません。遅延ロードについては,システムのマニュアルを参照してください。

  3. ldコマンドの-sオプションやstripコマンドなどで共用ライブラリのシンボル情報を削除した場合,その共用ライブラリは,カバレージ情報の蓄積,カウント情報の表示の対象になりません。

    なお,Linuxでは,cblcv2kコマンドやcblcn2kコマンドの-Executeオプションに指定する実行可能ファイルは,カバレージ情報の蓄積,カウント情報の表示の対象にしない場合でもシンボル情報が必要です。

使用例1

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

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

    AIXの場合

    ccbl2002 -PIC,Std -CVInf sub1.cbl

    Linuxの場合

    ccbl2002 -PIC,Std -CVInf -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 -CVInf main1.cbl -L ./ -lsub1 -OutputFile a.out

    Linuxの場合

    ccbl2002 -CVInf -UniObjGen main1.cbl -L ./ -lsub1 -OutputFile a.out
  4. -Libraryオプションを指定してカバレージ情報を蓄積する。

    AIXの場合

    cblcv2k -Library libsub1.a -Execute a.out

    Linuxの場合

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

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

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

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

    AIXの場合

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

    Linuxの場合

    ccbl2002 -DynamicLink,Call -CVInf -UniObjGen main1.cbl -OutputFile a.out
  3. 使用例1の4.と同様の手順で,-Libraryオプションを指定してカバレージ情報を蓄積する。

使用例3

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

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

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

    AIXの場合

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

    Linuxの場合

    ccbl2002 -DynamicLink,IdentCall -CVInf -UniObjGen main1.cbl -OutputFile a.out
  3. 使用例1の4.と同様の手順で,-Libraryオプションを指定してカバレージ情報を蓄積する。

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

-CVInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムで呼び出すときに,カバレージ情報の蓄積,カウント情報の表示ができない場合があります。

このような場合にカバレージ情報の蓄積,カウント情報の表示ができる環境変数CBLTDEXTARGETについて説明します。

環境変数

CBLTDEXTARGET

形式
CBLTDEXTARGET=YES
export CBLTDEXTARGET
機能

-CVInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムを呼ぶ場合に,カバレージ情報の蓄積,カウント情報の表示ができます。

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

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

注意事項
  1. 環境変数CBLTDEXTARGETは,カバレージ情報の蓄積,カウント情報の表示を使用するときに有効になります。運用環境では指定しないでください。

  2. 環境変数CBLTDEXTARGETを指定したときは,テスト対象のプロセスの情報を収集する回数が増加するため,処理速度が低下することがあります。カバレージ情報の蓄積,カウント情報の表示を終了した部分は,-CVInfコンパイラオプションを外して再コンパイル後に,カバレージ情報の蓄積,カウント情報の表示を実行してください。

  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を設定する必要があります。