6.4.2 共用ライブラリ
(1) コンパイルと実行
カバレージ情報の蓄積・カウント情報の表示で共用ライブラリを使用するとき,-PIC,Std,および-CVInfコンパイラオプションを指定してプログラムをコンパイルします。コンパイラオプションについては,マニュアル「COBOL2002 使用の手引 手引編」を参照してください。
共用ライブラリファイルは,cblcv2kコマンドやcblcn2kコマンドの-Libraryオプションでパスの指定がないファイル名を指定した場合,次の順序で検索します。検索した結果,目的のファイルが見つからないときは,次のエラーメッセージを出力し,カバレージ情報を蓄積したりカウント情報を表示したりできません。
「KCCC4207T-E ユーザプログラムの実行可能ファイル又はライブラリファイルが存在しません。ファイル(*** 1 ***)」
AIXの場合
-
環境変数CBLLSLIBの指定がある場合
cblcv2kコマンドやcblcn2kコマンドの-Libraryオプションで指定したファイル名と同一名称のファイル名が,パスプレフィクス付きで環境変数CBLLSLIBに指定されていれば,そのパスだけが検索されます。同一名称のファイル名が指定されていない,またはパスプレフィクスなしで指定されているときは,次の項目のとおりに検索します。
-
環境変数CBLLPATHの指定がある場合
指定されているパス,カレントディレクトリの順序で検索します。
-
環境変数が何も指定されていない場合
カレントディレクトリを検索します。
Linuxの場合
-
環境変数CBLLSLIBの指定がある場合
-
環境変数CBLLSLIBにパスプレフィクス付きのファイル名の指定があり,cblcv2kコマンドやcblcn2kコマンドの-Libraryオプションのファイル名と一致するとき
環境変数CBLLSLIBに指定されているパスだけ検索します。
-
環境変数CBLLSLIBにパスプレフィクスなしのファイル名の指定だけがあるとき
環境変数CBLLSLIBに指定されているファイルを,環境変数CBLLPATHまたは環境変数LD_LIBRARY_PATHに指定されているパスから検索します。
-
-
環境変数CBLLPATHの指定がある場合
環境変数CBLLSLIBに指定されているファイルを,環境変数CBLLPATHに指定されているパスから検索します。カレントディレクトリを検索対象とするときは,パスにカレントディレクトリを追加する必要があります。
-
環境変数LD_LIBRARY_PATHの指定がある場合
環境変数CBLLSLIBに指定されているファイルを,環境変数LD_LIBRARY_PATHに指定されているパスから検索します。カレントディレクトリを検索対象とするときは,パスにカレントディレクトリを追加する必要があります。
なお,環境変数CBLLPATHと同時に指定されているときは,環境変数CBLLPATHに指定されているパスを検索したあと,環境変数LD_LIBRARY_PATHに指定されているパスを検索します。
- 検索についての注意事項(AIXの場合)
-
環境変数LIBPATHに指定されているパスは検索されません。この環境変数で共用ライブラリの検索パスを指定している場合は,-Libraryオプションにパスプレフィクスを付けて指定する必要があります。
注意事項
-
AIXの場合の注意事項を次に示します。
-
arコマンドでアーカイブファイルとして作成した共用ライブラリ中に,同じ名称のメンバ(共用オブジェクト)が複数あるときは,先に配置されているメンバ(共用オブジェクト)をカバレージ対象とします。
-
-Lおよび-lオプションを指定して共用ライブラリをリンケージしたプログラムを実行し,-DynamicLink,Callまたは-DynamicLink,IdentCallコンパイラオプションを指定して再びリンケージした場合,この共用ライブラリをカバレージ情報の蓄積,カウント情報の表示の対象とできない場合があります。その場合は,次のどちらかの指定をします。
・共用ライブラリの検索ディレクトリ指定の,-Lオプションと同じディレクトリを,環境変数CBLLPATHに指定。
・-Lオプションと同じディレクトリを指定した共用ライブラリファイルを,環境変数CBLLSLIBに指定。
-
アーカイブファイルの中に含まれるアーカイブファイルは,カバレージ情報の蓄積,カウント情報の表示の対象になりません。
-
環境変数CBLLTAGによる検索動作の指定は,デバッガでは有効になりません。
-
-
遅延ロードされる共用ライブラリはカバレージ情報の蓄積,およびカウント情報の表示の対象となりません。遅延ロードについては,システムのマニュアルを参照してください。
-
ldコマンドの-sオプションやstripコマンドなどで共用ライブラリのシンボル情報を削除した場合,その共用ライブラリは,カバレージ情報の蓄積,カウント情報の表示の対象になりません。
なお,Linuxでは,cblcv2kコマンドやcblcn2kコマンドの-Executeオプションに指定する実行可能ファイルは,カバレージ情報の蓄積,カウント情報の表示の対象にしない場合でもシンボル情報が必要です。
- 使用例1
-
ccbl2002コマンドに-Lおよび-lオプションを使用して実行可能ファイルを作成します。
-
sub1.cblをコンパイルする。
AIXの場合
ccbl2002 -PIC,Std -CVInf sub1.cbl
Linuxの場合
ccbl2002 -PIC,Std -CVInf -UniObjGen sub1.cbl
-
共用ライブラリを作成する。
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
-
-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
-
-Libraryオプションを指定してカバレージ情報を蓄積する。
AIXの場合
cblcv2k -Library libsub1.a -Execute a.out
Linuxの場合
cblcv2k -Library libsub1.so -Execute a.out
- 使用例2
-
ccbl2002コマンドの-DynamicLink,Callコンパイラオプションを使用して実行可能ファイルを作成します。
-
使用例1の1.および2.と同様の手順で,sub1.cblに-CVInfコンパイラオプションを指定してコンパイルし,共用ライブラリを作成する。
-
-DynamicLink,Callコンパイラオプションを指定して実行可能ファイルを作成する。
AIXの場合
ccbl2002 -DynamicLink,Call -CVInf main1.cbl -OutputFile a.out
Linuxの場合
ccbl2002 -DynamicLink,Call -CVInf -UniObjGen main1.cbl -OutputFile a.out
-
使用例1の4.と同様の手順で,-Libraryオプションを指定してカバレージ情報を蓄積する。
- 使用例3
-
ccbl2002コマンドの-DynamicLink,IdentCallコンパイラオプションを使用して実行可能ファイルを作成します。
-
使用例1の1.および2.と同様の手順で,sub1.cblに-PIC,Std,および-CVInfコンパイラオプションを指定してコンパイルし,共用ライブラリを作成する。
-
-DynamicLink,IdentCallコンパイラオプションを指定して実行可能ファイルを作成する。
AIXの場合
ccbl2002 -DynamicLink,IdentCall -CVInf main1.cbl -OutputFile a.out
Linuxの場合
ccbl2002 -DynamicLink,IdentCall -CVInf -UniObjGen main1.cbl -OutputFile a.out
-
使用例1の4.と同様の手順で,-Libraryオプションを指定してカバレージ情報を蓄積する。
(2) -TDInfおよび-CVInfコンパイラオプションがないCOBOLプログラム,またはCOBOLプログラム以外から共用ライブラリを呼ぶ場合
-CVInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムで呼び出すときに,カバレージ情報の蓄積,カウント情報の表示ができない場合があります。
このような場合にカバレージ情報の蓄積,カウント情報の表示ができる環境変数CBLTDEXTARGETについて説明します。
-
-TDInfおよび-CVInfコンパイラオプションの指定がないCOBOLプログラム
-
COBOLプログラムを含まない実行可能ファイル
- 環境変数
-
CBLTDEXTARGET
- 形式
CBLTDEXTARGET=YES export CBLTDEXTARGET
- 機能
-
-CVInfコンパイラオプションを指定したCOBOLプログラムが含まれる共用ライブラリを,次のどちらかのプログラムを呼ぶ場合に,カバレージ情報の蓄積,カウント情報の表示ができます。
-
-TDInfおよび-CVInfコンパイラオプションの指定がないCOBOLプログラム
-
COBOLプログラムを含まない実行可能ファイル
-
- 注意事項
-
-
環境変数CBLTDEXTARGETは,カバレージ情報の蓄積,カウント情報の表示を使用するときに有効になります。運用環境では指定しないでください。
-
環境変数CBLTDEXTARGETを指定したときは,テスト対象のプロセスの情報を収集する回数が増加するため,処理速度が低下することがあります。カバレージ情報の蓄積,カウント情報の表示を終了した部分は,-CVInfコンパイラオプションを外して再コンパイル後に,カバレージ情報の蓄積,カウント情報の表示を実行してください。
-
次のディレクトリに格納した共用ライブラリは,カバレージ情報の蓄積,カウント情報の表示を対象にできません。
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
-
環境変数CBLTDEXTARGETの値にYES以外を指定した場合,環境変数CBLTDEXTARGETの指定は無効となります。
-
カバレージ情報の蓄積,カウント情報の表示を実行する前に,環境変数CBLTDEXTARGETを設定する必要があります。プログラムの連動実行をするときは,プログラムを実行する前に環境変数CBLTDEXTARGETを設定する必要があります。
-