32.5.10 リンクの設定
リンクを設定するコンパイラオプションについて,説明します。
- 〈この項の構成〉
(1) -Compileオプション
(a) 形式
-Compile,{CheckOnly|NoLink} -noCompile
(b) 機能
プログラムのコンパイル時,オブジェクトファイル(.o),および実行可能ファイルの生成を抑止します。
- -Compile,CheckOnly
-
このオプションを指定すると,実行可能ファイルを生成しないため,コンパイル速度が向上します。単にエラーチェックだけをしたい場合に指定します。
- -Compile,NoLink
-
オブジェクトファイルは出力しますが,実行可能ファイルは生成しません。出力したオブジェクトファイルは,あとでリンカを使用して実行可能ファイルにできます。
- -noCompile
-
-Compileオプションの指定を打ち消します。
(c) 注意事項
-
-Compileオプションを指定した場合,-OutputFileオプションの指定は無効となります。
また,-Compile,CheckOnlyオプションを指定した場合,アプリケーションデバッグ機能に関連するオプション(-DebugInf,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRange,または-TestCmdオプション)が指定されても,無効となります。
-
-Compile,CheckOnlyオプションを指定した場合,-PICオプション,-Profileオプション,-IdentCallオプションが指定されても無効となります。
(2) -OutputFileオプション
(a) 形式
-OutputFile ファイル名 -noOutputFile
(b) 機能
- -OutputFile ファイル名
-
生成する実行可能ファイルの名称を指定します。
ファイル名には,生成する実行可能ファイルの名称を指定します。
このオプションの指定がない場合,実行可能ファイルの名称は,a.outとなります。
実行可能ファイルをカレントディレクトリに出力する場合の指定例を,次に示します。
- (例)
ccbl2002 -OutputFile TEST1 -Main,System source.cbl
実行可能ファイルは,TEST1という名称で出力されます。
実行可能ファイルを任意のディレクトリに出力する場合の指定例を,次に示します。
- (例)
ccbl2002 -Main,System TEST1.cbl -OutputFile /usr/user1/TEST1.out
実行可能ファイルは,/usr/user1ディレクトリにTEST1.outという名称で出力されます。パスプレフィックスの指定が省略された場合,実行可能ファイルは,カレントディレクトリに出力されます。
-OutputFileオプションと-Compileオプションを同時に指定した場合,-OutputFileオプションは,無効となります。
- -noOutputFile
-
-OutputFileオプションの指定を打ち消します。
(3) -Linkオプション
(a) 形式
-Link オプションの並び -noLink
(c) 注意事項
-
-Linkオプション以降の文字は,ほかのオプション名,ファイル名なども含めすべてリンカに渡されます。したがって,このオプションは最後に指定してください。
-
-Linkオプションは,-Detailsオプションでのコンパイラオプションの詳細情報表示の対象にはなりません。
-
-Linkオプションに指定した文字列は,そのままccコマンドに渡されるため,指定するリンカオプションは,ccコマンドのオプションとなります。ただし,OSがAIXでCコンパイラが組み込まれていない場合は,ldコマンドが直接起動されます。この場合,-Linkオプション以降の文字列には,ldコマンドのオプションを指定してください。
(4) -DynamicLinkオプション
(a) 形式
-DynamicLink,{Call|IdentCall} -noDynamicLink
(b) 機能
- -DynamicLink,Call
-
プログラムを呼び出す場合,呼び出されるプログラムが静的にリンクされていない場合,動的なリンク(ダイナミックリンク)が設定されます。詳細は「18. プログラムの呼び出し」を参照してください。
- -DynamicLink,IdentCall
-
一意名指定のCALL文でプログラムを呼び出す場合,動的なリンク(ダイナミックリンク)を行います。定数指定のCALL文は,静的なリンク(スタティックリンク)となります。詳細は「18. プログラムの呼び出し」を参照してください。
- -noDynamicLink
-
-DynamicLinkオプションの指定を打ち消します。
(5) -OldLinkOpt,GCBypassオプション(AIXで有効)
(a) 形式
-OldLinkOpt,GCBypass -noOldLinkOpt
(b) 機能
- -OldLinkOpt,GCBypass
-
翻訳とリンクを同時に行う場合,静的な参照関係のないオブジェクトをリンク対象とするため,ccbl2002コマンドで-bgcbypassリンカオプションを仮定します。
- -noOldLinkOpt
-
-OldLinkOptオプションの指定を打ち消します。
(c) 注意事項
-
動的なリンクによるプログラム呼び出しを使用している場合,COBOL2002 V4より前に作成したCOBOLオブジェクトやCプログラムのオブジェクト中のプログラムを呼び出し先に指定すると,参照関係のないオブジェクトがリンク対象とならないでプログラムの呼び出しに失敗することがあります。
COBOL2002 V4より前に作成したCOBOLオブジェクトやCプログラムのオブジェクトを混在させる場合は,このオプションを指定してください。
-
このオプションの指定によって,-bgcbypassリンカオプションの対象を適切にするためには,ccbl2002コマンドで,COBOLソース,オブジェクトファイル,アーカイブファイル,-lリンカオプションで指定するライブラリの順に指定する必要があります。
- -bgcbypassリンカオプションの対象が適切になる例
-
ccbl2002 -OldLinkOpt,GCBypass -OutputFile TEST01 -Main,System TEST01.CBL TEST02.o libTEST03.a -L/TEST/LIBRRY -lTEST04
- -bgcbypassリンカオプションの対象が適切にならない例
-
ccbl2002 -OldLinkOpt,GCBypass -OutputFile TEST01 -Main,System TEST01.CBL libTEST03.a -L/TEST/LIBRRY -lTEST04 TEST02.o
-
翻訳とリンクを別に行う場合は,リンク(cc/ldコマンド)時に-bgcbypassリンカオプションを指定する必要があります。
(6) -OldStyleObjectオプション(AIXで有効)
(a) 形式
-OldStyleObject -noOldStyleObject
(b) 機能
- -OldStyleObject
-
AIXシステムでCOBOL2002が生成するオブジェクトの形式を,AIX COBOL2002 V3以前と同様の形式※に戻します。
- 注※
-
-
AIX COBOL2002 V3以前のコンパイラが生成するオブジェクトの形式の場合
実行可能ファイルをリンクする際に,この形式のオブジェクトファイルを指定した場合,AIXシステムのリンカは,特にリンカオプションの指定がないと,静的な参照関係がないオブジェクトファイルをリンク対象としません。
-
AIX COBOL2002 V4のコンパイラが生成するオブジェクトの形式の場合
実行可能ファイルをリンクする際に,この形式のオブジェクトファイルを指定した場合,AIXシステムのリンカは,静的な参照関係がないオブジェクトファイルでもリンク対象とします。
-
- -noOldStyleObject
-
-OldStyleObjectオプションの指定を打ち消します。
(c) 注意事項
-
-OldStyleObjectオプションを指定しないで作成したオブジェクトファイルを使用して実行可能ファイルまたは共用ライブラリを作成する場合に,次の条件をすべて満たすときは,実行可能ファイルまたは共用ライブラリのサイズが,AIX COBOL2002 V3以前に作成したもののサイズと比べて,極端に肥大化することがあります。
-
アーカイブファイルを指定して,実行可能ファイルまたは共用ライブラリを作成している
-
1.のアーカイブファイルに,-OldStyleObjectオプションを指定しないで作成したオブジェクトファイルが含まれている
-
2.のオブジェクトファイルのプログラムに,メインプログラムまたはメインプログラムから直接的または間接的に呼び出されるプログラム中で宣言されているEXTERNALデータ項目と,同じ名称のEXTERNALデータ項目が宣言されている
サイズの肥大化を回避する場合,2.のオブジェクトファイルは,-OldStyleObjectオプションを指定して作成したオブジェクトファイルとしてください。
-
-
実行可能ファイルを作成するとき,このオプションを指定して作成したCOBOLプログラムのオブジェクトファイルはリンク時に直接指定しても,静的な参照関係がないとリンク対象となりません。静的な参照関係がないオブジェクトファイルをリンク対象とする場合は,次のどれかのオプションを指定してください。
-
-bgcbypassリンカオプション(-bgcbypass:入力ファイル数)
-
-bkeepfileリンカオプション(-bkeepfile:入力ファイル名)
-
-uリンカオプション(-u プログラム名)
-
-OldLinkOpt,GCBypassオプション(ccbl2002コマンドでリンクする場合だけ)
-OldLinkOpt,GCBypassオプションの詳細については,「(5) -OldLinkOpt,GCBypassオプション(AIXで有効)」を参照してください。
-