COBOL2002 使用の手引 操作編

[目次][用語][索引][前へ][次へ]

2.4.5 共用ライブラリ

<この項の構成>
(1) コンパイルと実行
(2) プログラムからの連動実行(HP-UX(IPF),HP-UX(IPF64)で有効)
(3) -TDInfおよび-CVInfコンパイラオプションがないCOBOLプログラム,またはCOBOLプログラム以外から共用ライブラリを呼ぶ場合(Linux(x64)で有効)

(1) コンパイルと実行

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

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

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

HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64)の場合
  • 環境変数CBLLSLIBの指定がある場合
    cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションで指定したファイル名と同一名称のファイル名が,パスプレフィクス付きで環境変数CBLLSLIBに指定されていれば,そのパスだけが検索されます。同一名称のファイル名が指定されていない,またはパスプレフィクスなしで指定されているときは,次の項目のとおりに検索します。
  • 環境変数CBLLPATHの指定がある場合
    指定されているパス,カレントディレクトリの順序で検索します。
  • 環境変数が何も指定されていない場合
    カレントディレクトリを検索します。

Linux(x86),Linux(x64),Linux(IPF64),Solaris(SPARC)の場合
  • 環境変数CBLLSLIBの指定がある場合
    cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションで指定したファイル名と同一名称のファイル名が,パスプレフィクス付きで環境変数CBLLSLIBに指定されていれば,そのパスだけが検索されます。同一名称のファイル名が指定されていない,またはパスプレフィクスなしで指定されているときは,次の項目のとおりに検索します。
  • 環境変数LD_LIBRARY_PATHの指定がある場合
    指定されているパスを検索します。カレントディレクトリを検索する場合も,この環境変数LD_LIBRARY_PATHに指定しておく必要があります。
  • 環境変数が何も指定されていない場合
    cbltd2kコマンドやcbltl2kコマンドの-Libraryオプションで指定したファイルはテスト対象になりません。環境変数CBLLSLIBまたはLD_LIBRARY_PATHを指定する必要があります。

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

注意事項

  1. HP-UX(IPF),HP-UX(IPF64)の場合,共用ライブラリの作成時には,-lcbl2ktdオプションを指定しないでください。
  2. AIX(32),AIX(64)の場合の注意事項を次に示します。
    • 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による検索動作の指定は,デバッガでは有効になりません。
  3. 遅延ロードされる共用ライブラリはテストデバッグの対象になりません。遅延ロードについては,システムのマニュアルを参照してください。

使用例1
ccbl2002コマンドに-Lオプションを使用して実行可能ファイルを作成します。
  1. sub1.cblをコンパイルする。
    HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Linux(IPF64),Solaris(SPARC)の場合
    ccbl2002 -PIC,Std -TDInf sub1.cbl
    Linux(x86),Linux(x64)の場合
    ccbl2002 -PIC,Std -TDInf -UniObjGen sub1.cbl
  2. 共用ライブラリを作成する。
    HP-UX(IPF)の場合
    ld -b sub1.o -o libsub1.so -a archive -L/opt/HILNGcbl2k/lib -lcbl2kml
    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 -b64 sub1.o -o libsub1.a -bpT:0x100000000 -bpD:0x110000000
     -bnoentry -bM:SRE -bexpall -L/opt/HILNGcbl2k64/lib -lcbl2k64
     -lcbl2kml64 -lm -lc
    Linux(x86),Linux(IPF64)の場合
    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
    HP-UX(IPF64)の場合
    ld -b sub1.o -o libsub1.so -a archive -L/opt/HILNGcbl2k64/lib -lcbl2kml
    Solaris(SPARC)の場合
    ld -G sub1.o -o libsub1.so -Bstatic -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc
  3. -Lオプションで共用ライブラリを指定して,実行可能ファイルを作成する。-Lオプションについては,システムの規則に従ってください。
    HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Linux(IPF64),Solaris(SPARC)の場合
    ccbl2002 -TDInf main1.cbl -L ./ -lsub1 -OutputFile a.out
    Linux(x86),Linux(x64)の場合
    ccbl2002 -TDInf -UniObjGen main1.cbl -L ./ -lsub1 -OutputFile a.out
     
  4. -Libraryオプションを指定してテストデバッグを開始する。
    HP-UX(IPF),HP-UX(IPF64),Linux(x86),Linux(x64),Linux(IPF64),Solaris(SPARC)の場合
    cbltl2k -Library libsub1.so -Execute a.out
    AIX(32),AIX(64)の場合
    cbltl2k -Library libsub1.a -Execute a.out

使用例2
ccbl2002コマンドの-DynamicLink,Callコンパイラオプションを使用して実行可能ファイルを作成します。
  1. 使用例1の1.および2.と同様の手順で,sub1.cblに-TDInfコンパイラオプションを指定してコンパイルし,共用ライブラリを作成する。
  2. -DynamicLink,Callコンパイラオプションを指定して実行可能ファイルを作成する。
    HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Linux(IPF64),Solaris(SPARC)の場合
    ccbl2002 -DynamicLink,Call -TDInf main1.cbl -OutputFile a.out
    Linux(x86),Linux(x64)の場合
    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コンパイラオプションを指定して実行可能ファイルを作成する。
    HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Linux(IPF64),Solaris(SPARC)の場合
    ccbl2002 -DynamicLink,IdentCall -TDInf main1.cbl -OutputFile a.out
    Linux(x86),Linux(x64)の場合
    ccbl2002 -DynamicLink,IdentCall -TDInf -UniObjGen main1.cbl -OutputFile a.out
  3. 使用例1の4.と同様の手順で,-Libraryオプションを指定してテストデバッグを開始する。

(2) プログラムからの連動実行(HP-UX(IPF),HP-UX(IPF64)で有効)

HP-UX(IPF),HP-UX(IPF64)の場合,プログラムからの連動実行で,共用ライブラリ名を指定してテストデバッグをするときは,cblts2kコマンドによって実行可能ファイルの属性を変更する必要があります。

cblts2kコマンドについては,「2.4.6 実行可能ファイルの属性変更(HP-UX(IPF),HP-UX(IPF64)で有効)」を参照してください。

注意事項
  • プログラムからの連動実行時に実行可能ファイルの属性を変更しないで,環境変数CBLTDEXECの-Libraryオプションで共用ライブラリ名を指定しても,無効になります。

使用例1
実行可能ファイルa.outから呼び出される共用ライブラリのデバッグができるように実行可能ファイルの属性を変更します。
cblts2k -Enable -Set a.out

使用例2
実行可能ファイルの属性を元に戻します。
cblts2k -Disable -Set a.out

使用例3
実行可能ファイルの属性を表示します。
cblts2k -Status -Set a.out

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

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

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

環境変数
CBLTDEXTARGET

形式
CBLTDEXTARGET=YES
export CBLTDEXTARGET

機能
-TDInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムが呼ぶ場合に,テストデバッグができます。
  • -TDInfおよび-CVInfコンパイラオプションの指定がないCOBOLプログラム
  • COBOLプログラムを含まない実行可能ファイル

注意事項
  1. 環境変数CBLTDEXTARGETは,テストデバッガを使用するときに有効になります。運用環境では指定しないでください。
  2. 環境変数CBLTDEXTARGETを指定したときは,テスト対象のプロセスの情報を収集する回数が増加するため,処理速度が低下することがあります。テストデバッグ終了した部分は,-TDInfコンパイラオプションを外して再コンパイル後にテストデバッガでテストしてください。
  3. 次のディレクトリに格納した共用ライブラリは,テストデバッグの対象にできません。
    /usr/lib64,/lib64
    /opt/HILNGcbl2k64/lib
  4. 環境変数CBLTDEXTARGETの値にYES以外を指定した場合,環境変数CBLTDEXTARGETの指定は無効となります。
  5. テストデバッグを実行する前に,環境変数CBLTDEXTARGETを設定する必要があります。プログラムの連動実行時をするときは,プログラムを実行する前に環境変数CBLTDEXTARGETを設定する必要があります。