38.1.3 オプション
リンカ(LINKコマンド)で使用できるオプションを次に示します。
- 〈この項の構成〉
-
(2) -DEF:モジュール定義ファイル名
モジュール定義ファイル(.def)を指定するためのオプションです。ファイル名は拡張子を付けて指定します。-DEFオプションは一つだけ指定できます。モジュール定義ファイルについては,「38.4 モジュール定義ファイル」を参照してください。
(3) -DEFAULTLIB:ライブラリ名
コマンドライン上のオブジェクトファイルやライブラリだけで解決できなかった外部参照の検索先ライブラリを指定するためのオプションです。同じライブラリ名が-NODEFAULTLIBオプションにも指定されている場合は,-NODEFAULTLIBオプションが優先されます。
(5) -ENTRY:シンボル名
実行モジュールの入口点を指定するためのオプションです。シンボル名にはOSが最初に制御を渡すプログラム(スタートアッププログラム)の名前を指定します。
OSが最初に呼び出すプログラムは,次の呼び出し規約でなければなりません。
- Windows(x86) COBOL2002の場合
-
-
stdcall
-
- Windows(x64) COBOL2002の場合
-
-
fastcall
-
例えば,アセンブラプログラムが主プログラムの場合などで,ユーザ自身がスタートアッププログラムを作成したときに,-ENTRYオプションを指定します。
- 注意事項
-
COBOLプログラムが主プログラムとなるアプリケーションを作成する場合,またはCOBOLのDLLアプリケーションを作成する場合は,次のように入口点を指定してください。
-
コンソールアプリケーションの場合
-ENTRY:mainCRTStartup
-
WINDOWSアプリケーションの場合
-ENTRY:WinMainCRTStartup
-
DLLの場合
- Windows(x86) COBOL2002の場合
-
-ENTRY:_DllMainCRTStartup@12
- Windows(x64) COBOL2002の場合
-
-ENTRY:_DllMainCRTStartup
ただし,これらの指定は,LINKコマンドで直接COBOLプログラムをリンクする場合だけ必要になります。ccbl2002コマンド,および開発マネージャを使用する場合は,リンカオプションでの入口点の指定は必要ありません。
また,LINKコマンドでCOBOLプログラムをリンクする場合は,-ENTRYオプションの代わりに,-SUBSYSTEMオプションでも入口点を指定できます。指定形式を次に示します。
-
コンソールアプリケーションの場合
-SUBSYSTEM:CONSOLE
-
WINDOWSアプリケーションの場合
-SUBSYSTEM:WINDOWS
これらのオプションを指定すると,指定に応じて適切な入口点が仮定されます。
-
(6) -EXPORT:名前〔,@順序番号〔,NONAME〕〕
名前をエクスポートするためのオプションです。このオプションはモジュール定義ファイルのEXPORTS文と同じです。
@順序番号(1〜65,535)を指定すると,名前ではなく番号で関数を呼び出せます。この呼び出しの方がより速く関数を呼び出せます。
順序番号のあとにNONAMEを付けると,名前はエクスポートされないため,順序番号による呼び出しだけができるようになります。
(7) -FORCE〔:{MULTIPLE|UNRESOLVED}〕
外部シンボルの未解決エラーや外部シンボルの多重定義エラーが発生しても,強制的に実行可能ファイルを生成させるためのオプションです。
MULTIPLEを指定すると,外部シンボルの定義が重複していても出力ファイルを作成します。
UNRESOLVEDを指定すると,未定義の外部シンボルがあっても出力ファイルを作成します。
引数を省略すると,MULTIPLEとUNRESOLVEDの両方が仮定されます。
(8) -HEAP:仮想メモリサイズ〔,実メモリサイズ〕
ローカルヒープのサイズを変更するためのオプションです。仮想メモリ上の上限サイズと,1回で割り当てられる実メモリの上限サイズをバイト単位で指定します。
仮想メモリサイズのデフォルト値は1メガバイトです。また,指定した値は4バイト単位に切り上げられます。このオプションは,モジュール定義ファイルのHEAPSIZE文と等価です。
(9) -IMPLIB:インポートライブラリ名
リンカ(LINKコマンド)の出力するインポートライブラリの名称を指定するためのオプションです。省略時は,主出力ファイルである実行可能ファイル名の拡張子を.libに変えて作成されます。
(11) -LARGEADDRESSAWARE
生成される実行可能ファイルが,2ギガバイトを超えるアドレスを取り扱えるようにするためのオプションです。Windows(x64) COBOL2002の場合は,このオプションは既定で有効になります。
(12) -LIBPATH:ライブラリのパス
環境変数LIBに先行して検索したいライブラリパスを指定するためのオプションです。入力する-LIBPATHオプションごとに一つのフォルダを指定します。複数のフォルダを指定する場合は,フォルダごとに-LIBPATHオプションを指定します。リンカ(LINKコマンド)は,指定された順にフォルダを検索します。
(13) -MANIFEST〔:EMBED〔,ID=リソースID〕〕
リンカがマニフェストファイルを生成することを指定するためのオプションです。
EMBEDを指定すると,リンク時に実行可能ファイルまたはDLLファイルにマニフェストファイルを埋め込むことができます。リソースIDには,実行可能ファイルの場合は1を,DLLファイルの場合は2を指定します。IDパラメタを省略すると,-DLLオプションが指定されている場合は2が,それ以外の場合は1が既定値として設定されます。
-MANIFESTオプションを指定して,-MANIFESTUACオプションと-DLLオプションのどちらも指定していない場合,ユーザアカウント制御(UAC)レベルがasInvokerに設定されているマニフェストに既定のUACフラグメントが挿入されます。ユーザアカウント制御(UAC)レベルの詳細については,「(14) -MANIFESTUAC〔:{NO|UACフラグメント}〕」を参照してください。
-MANIFESTオプションを指定すると,マニフェストファイルの名前は,出力ファイルの名前と同じになり,ファイル名に.manifest が追加されます。例えば,出力ファイルの名前がMyFile.exeの場合,マニフェストファイル名はMyFile.exe.manifestになります。
(14) -MANIFESTUAC〔:{NO|UACフラグメント}〕
ユーザアカウント制御(UAC)情報をプログラムマニフェストに組み込むかどうかを指定するオプションです。
- -MANIFESTUAC
-
既定のUAC情報をプログラムマニフェストに組み込みます。
既定値として,level値はasInvokerが,uiAccess値はfalseが設定されます。
- -MANIFESTUAC:NO
-
UAC情報をプログラムマニフェストに組み込みません。
- -MANIFESTUAC:UACフラグメント
-
UACフラグメントを指定すると,指定した値のUAC情報をプログラムマニフェストに組み込みます。
UACフラグメントは次の形式で指定します。
-MANIFESTUAC:level={'asInvoker'|'highestAvailable'|'requireAdministrator'}
値
意味
asInvoker[既定値]
アプリケーションを開始したプロセスと同じアクセス許可レベルで実行します。[管理者として実行]を選択すると,アプリケーションをより高いアクセス許可レベルに昇格させることができます。
highestAvailable
可能な限り高いアクセス許可レベルで実行します。使用できる最も高いアクセス許可レベルが,開始したプロセスのレベルより高い場合は,資格情報の入力が求められます。
requireAdministrator
管理者のアクセス許可レベルで実行します。アプリケーションを開始するユーザは管理者グループのメンバである必要があります。開始したプロセスが管理者のアクセス許可レベルで実行されない場合は,資格情報の入力が求められます。
-MANIFESTUAC:uiAccess={'true'|'false'}
アプリケーションがユーザインタフェースの保護レベルをバイパスし,入力をデスクトップ上のアクセス許可レベルの高いウィンドウ(例えば,オンスクリーンキーボード)にアクセスできるようにする場合はtrue,それ以外の場合はfalseを指定します。既定値はfalseです。trueの設定は,ユーザインタフェースのユーザ補助アプリケーションでだけで行います。
また,次の形式で指定すると,level値およびuiAccess値の指定を1ステップで行うことができます。
-MANIFESTUAC:"level={'asInvoker'|'highestAvailable'|'requireAdministrator'} uiAccess={'true'|'false'}"
-MANIFESTUACオプションを複数指定した場合は,最後に入力したオプションが優先されます。
(15) -MAP〔:ファイル名〕
マップファイルを生成するためのオプションです。ファイル名を指定しなかった場合は,主出力ファイルである実行可能ファイル名の拡張子を.mapに変えて作成されます。
マップファイルは,プログラムやデータが実行可能プログラムやDLL中のどこに配置されたか,それらはどのライブラリのどのオブジェクトファイルから取り込まれたものかを示す情報を含んでいるリストファイルです。外部シンボル単位にそれらの情報が出力されます。さらに,-MAPINFO:EXPORTSオプションを指定することで,マップファイルの中にエクスポート情報を加えることもできます。
(17) -NODEFAULTLIB〔:ライブラリ名〕
指定されたライブラリをデフォルトライブラリの検索対象から除くためのオプションです。ライブラリ名を指定しなかった場合は,すべてのデフォルトライブラリが検索対象から除かれます。
複数のデフォルトライブラリを検索対象から除外するためには,除外するライブラリごとに-NODEFAULTLIBオプションを繰り返し指定します。
(18) -ORDER:@ファイル名
実行可能ファイル内に配置する関数の順序を指定するためのオプションです。@ファイルには,1行に一つの関数の割合で関数名を記述します。コマンドファイルと同様に,行内の有効カラムの終わりをセミコロン(;)で指定でき,その後ろにコメントを書けます。このオプションを使用するには,オブジェクトファイル内のすべての関数に,必要なCOMDATレコードが生成されていることが必要です。必要なCOMDATレコードがない場合は,オプションは無効になり,関数は参照された順番に配置されます。
(19) -OUT:出力ファイル名
主出力である実行可能ファイル,DLLファイルの名称を指定するためのオプションです。このオプションの指定がなく,モジュール定義ファイルにも出力ファイルが指定されていなければ,最初のOBJファイルの拡張子を.exe,または.dllに変えた名前で出力ファイルが作成されます。
(20) -STACK:仮想メモリサイズ〔,実メモリサイズ〕
プログラムのスタックのサイズを変更するためのオプションです。仮想メモリ上の上限サイズと,1回で割り当てられる実メモリの上限サイズをバイト単位で指定します。
仮想メモリサイズのデフォルト値は1メガバイト,実メモリサイズのデフォルト値は4キロバイトに設定されます。
このオプションは,モジュール定義ファイルのSTACKSIZE文と等価です。
(21) -SUBSYSTEM:{CONSOLE|WINDOWS}
OSに,実行可能ファイル(.exe)の実行方法を指定するためのオプションです。
CONSOLEを指定すると,コンソールを必要とするプログラム(コンソールプログラム)を作成します。コンソールプログラムには,OSからコンソールが与えられます。
WINDOWSを指定すると,コンソールを必要としないプログラム(ウィンドウプログラム)を作成します。
-SUBSYSTEMオプションを指定すると,-ENTRYオプションを指定しなくても,実行可能プログラムの入口点にCOBOLで使用できるスタートアッププログラムが設定されます。
なお,ccbl2002コマンド,および開発マネージャを使用する場合は,-SUBSYSTEMオプションを指定しないでください。
(22) -VERBOSE〔:{LIB|UNUSEDLIBS}〕
リンクプロセスの情報を詳しく表示するためのオプションです。
リンクされるオブジェクトファイルの名称,使用するライブラリの名称,リンクの各フェーズなどが表示されます。
LIBを指定すると,検索されたライブラリだけの進行状況メッセージが表示されます。表示される情報は,ライブラリ検索の進行状況,各ライブラリおよびオブジェクト名(絶対パス),そのライブラリで解決されたシンボル,ならびにそのシンボルを参照しているオブジェクトの一覧です。
UNUSEDLIBSを指定すると,イメージの作成時に使用されていないライブラリファイルに関する情報が表示されます。