26.2.2 マルチスレッド対応COBOLプログラムのリンク
マルチスレッド対応COBOLプログラムは,ccbl2002コマンド,またはcc/ldコマンドでリンクします。
リンク時には,システムごとのスレッド制御方式に対応したスレッド関数ライブラリを指定する必要があります。また,cc/ldコマンドを使用してリンクするときは,さらに,COBOL2002スレッド関数インタフェースライブラリを指定する必要があります。
なお,cc/ldコマンドを使用して実行可能ファイルを生成する方法については,「34.1.5 ccコマンドおよびldコマンドの-lオプション」を参照してください。
(1) マルチスレッド対応COBOLプログラムのリンク時に指定するライブラリ
マルチスレッド対応COBOLプログラムで使用するスレッド関数ライブラリとCOBOL2002スレッド関数インタフェースライブラリとの対応を次に示します。
使用できるOS |
スレッド関数ライブラリ |
COBOL2002スレッド関数 インタフェースライブラリ |
---|---|---|
AIX(32) |
libpthreads.a |
libcbl2kmp.a |
AIX(64) |
libpthreads.a |
libcbl2kmp64.a |
Linux |
libpthread.so |
libcbl2kmp.so |
(2) リンク方法
(a) AIX(32)の場合
AIX(32)の場合,スレッド関数ライブラリにはlibpthreads.aを,COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp.aを使用します。指定するオプション,および指定例を次に示します。
- ccbl2002コマンドを使用する場合
-
-MultiThread,-lpthreadsオプションを指定します。
- (例)
ccbl2002 -MultiThread cmain.o SUBCBL.o -lpthreads
- cc/ldコマンドを使用する場合
-
-lcbl2kmp,-lpthreadsオプションを指定します。
- (例)
cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lcbl2kmp -lpthreads -lm
(b) AIX(64)の場合
AIX(64)の場合,スレッド関数ライブラリにはlibpthreads.aを,COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp64.aを使用します。指定するオプション,および指定例を次に示します。
- ccbl2002コマンドを使用する場合
-
-MultiThread,-lpthreadsオプションを指定します。
- (例)
ccbl2002 -MultiThread cmain.o SUBCBL.o -lpthreads
- cc/ldコマンドを使用する場合
-
-lcbl2kmp64,-lpthreadsオプションを指定します。
- (例)
cc cmain.o SUBCBL.o -q64 -L/opt/HILNGcbl2k64/lib -lcbl2k64 -lcbl2kml64 -lcbl2kmp64 -lpthreads -lm
(c) Linuxの場合
Linuxの場合,スレッド関数ライブラリにはlibpthread.soを,COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp.soを使用します。指定するオプション,および指定例を次に示します。
- ccbl2002コマンドを使用する場合
-
-MultiThread,-lpthreadオプションを指定します。
- (例)
ccbl2002 -MultiThread -UniObjGen cmain.o SUBCBL.o -lpthread
- cc/ldコマンドを使用する場合
-
-lcbl2kmp,-lpthreadオプションを指定します。
- (例)Linux(x86)の場合
cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lcbl2kmp -lpthread -lm
- (例)Linux(x64)の場合
cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k64/lib -lcbl2k -lcbl2kml -lcbl2kmp -lpthread -lm
(3) 注意事項
-
次のようなリンクをした場合,生成された実行可能ファイルの動作は保証しません。
-
指定したライブラリの組み合わせが不正である
-
必要なライブラリをリンクしなかった
-
必要なオプションを指定しなかった
-
-
cc/ldコマンドを使用したリンクで,システムのスレッドライブラリを指定する場合は,ほかのシステムライブラリとの指定順序に制約がないか注意が必要です。詳細は,システムのリファレンスで確認してください。
-
Linuxでは,スレッド関数ライブラリlibpthread.soをリンクしないと,プログラムの実行時にメッセージが出力され,実行が中止されます。