35.1.3 コンパイルとリンクを実行する場合の注意事項
コンパイルとリンクを同時に実行する場合,および別々に実行する場合の注意事項について説明します。
- 〈この項の構成〉
(1) COBOLプログラムとCプログラムをリンクする場合の注意事項
COBOLプログラムとCプログラムをリンクする場合は,C実行時ライブラリに,マルチスレッドに対応したダイナミックリンクライブラリを使用する必要があります。
(2) 標準ライブラリを使用する場合の注意事項
-
次のオプションを使用する場合で,ccbl2002コマンドで実行可能ファイルを作成する場合は,実行可能ファイルと標準ライブラリ作成時に,同じオプションを指定する必要があります。
-XMAP,LinePrint(Windows(x86) COBOL2002の場合),-CompatiM7(Windows(x86) COBOL2002の場合),-OpenTP1(データコミュニケーション機能の使用と同時に使用する場合)
-
テストデバッガ,カバレージを使用する場合は,実行可能ファイルと標準ライブラリのプログラム情報ファイルが共に参照できるようにする必要があります。プログラム情報ファイルの出力先の詳細については,マニュアル「COBOL2002 操作ガイド」のテストデバッガで使用するファイルの説明を参照してください。
-
実行可能プログラムを作成する場合,標準ライブラリに含まれているプログラムを,すべて動的リンクで呼び出している場合は,標準ライブラリを指定してもリンクできません。
(3) オブジェクトファイルを別環境でリンクする場合の注意事項
-
COBOLプログラムのオブジェクトファイルをコピーして,別環境でリンクする場合,オブジェクトファイルだけでなく,EXPORT名称ファイル(.cbd)もコピーする必要があります。
-
COBOLプログラムのオブジェクトファイルを用いて別環境でリンクする場合で,オブジェクトファイルの生成時に次のオプションを指定したときは,リンク時にも同じオプションを指定する必要があります。
-XMAP,LinePrint(Windows(x86) COBOL2002の場合),-CompatiM7(Windows(x86) COBOL2002の場合),-OpenTP1(データコミュニケーション機能の使用と同時に使用する場合)
(4) マニフェストのUAC情報を変更する場合の注意事項
ccbl2002コマンドを使用して実行可能ファイルを作成するとき,COBOL2002コンパイラは埋め込むマニフェストにUAC情報を指定するセクションを挿入します。既定のアクセス許可レベルはasInvokerです。このアクセス許可レベルを変更したいときは,-Linkコンパイラオプションに-MANIFESTUACリンカオプションを指定してアクセス許可レベルの値を設定してください。-MANIFESTUACリンカオプションの詳細については,「38.1.3 オプション」の「(14) -MANIFESTUAC〔:{NO|UACフラグメント}〕」を参照してください。
管理者のアクセス許可レベルで実行するように指定する例を次に示します。
ccbl2002 -Main,System TEST01.cbl -OutputFile TEST02.exe -Link -MANIFESTUAC:level='requireAdministrator'
(5) ccbl2002コマンドによるリンク時にエラーが発生した場合
ccbl2002コマンドまたはccblコマンドから呼び出すLINKコマンドやMTコマンドは,出力ファイルがOSやウィルスチェッカなどから一時的に共有されることが原因で,エラーになることがあります。この場合,時間をおいて再コンパイルしてください。時間をおいても問題が解決しないときは,次のどちらかの方法で対処してください。
-
環境変数CBLLINKINTERVALで,対象ファイルへのアクセス間隔を変更した状態にして再コンパイルしてください。なお,環境変数CBLLINKINTERVALについては,「33.6.3 コンパイラ環境変数の詳細」の「(11) CBLLINKINTERVAL」を参照してください。
-
ccbl2002コマンドに-ManifestFileExtオプションを指定して,マニフェストの埋め込みを抑止した状態で再コンパイルしてください。なお,-ManifestFileExtオプションについては,「33.5.10 リンクの設定」の「(13) -ManifestFileExtオプション」を参照してください。
(6) 実行可能ファイル,DLLファイルの名称の注意事項
実行可能ファイル,またはDLLファイルの名称に「;」および「@」は指定しないでください。作成する実行可能ファイル,またはDLLファイルの名称に「;」および「@」が含まれていると,MTコマンドでエラーとなりマニフェストの埋め込みに失敗します。