リンカ オプション

リンカ オプションにより、リンク方法をさまざまに制御できます。各リンカ オプションは、先頭にマイナス記号 (-) またはスラッシュ (/) を付けて指定します。大文字と小文字は区別されません。リンカ オプションを指定する順番は自由で、オブジェクト ファイル名の前後どちらにでも指定できます。

以下では、各リンカ オプションをアルファベット順に説明します。

/32

64 KB を超えるセグメントをリンクします。現在、LIL が 64 KB 超のセグメントをサポートしているファイル形式は、/B で作成される BIN 形式だけです。

/AMIN<hhhh>

.EXE ファイルの MINALLOC フィールドの値を指定します。作成したプログラムに OS から割り当てられる最小メモリ サイズの 1/16 を 16 進数で指定します。たとえば、/AMIN300 と指定すると、300 × 16 = 4800 バイトのメモリが割り当てられます。

通常、MINALLOC フィールドには適切な値が自動的に設定されるため、このオプションを指定する必要はありません。

/AMAX<hhhh>

.EXE ファイルの MAXALLOC フィールドの値を指定します。作成したプログラムに OS から割り当てられる最大メモリ サイズを指定します。指定方法は /AMIN と同じです。

/B[<seg-address>]

単純なバイナリ イメージ ファイル (拡張子 .bin) を作成します。BIN ファイルは COM ファイルと似ていますが、COM とは異なり先頭の 100h バイトが除去されません。

イメージを 1 以上のアドレスに配置する場合は、seg-address を指定します。たとえば、LIL /BFE00 と指定すると、FE00:0000 以降に配置して実行するためのバイナリ イメージが生成されます。


LIL F1.OBJ F2.OBJ /B
LIL F1.OBJ F2.OBJ /B1200

/C

COM 形式の実行ファイルを作成します。拡張子 .com を持つ実行ファイルが作成されます。このオプションを指定してリンクするプログラムは、あらかじめ COM 形式向けに作られている必要があります。

このオプションを指定せずに EXE 形式の実行ファイルを作成し、それを MS-DOS に付属のユーティリティ EXE2BIN を使用して COM 形式に変換することもできます。

/D

セグメントを MS-DOS 標準セグメント順序に従って配置します。これは、アセンブラのソースファイルに DOSSEG ディレクティブを記述することと同じです。

/E<file-name>

作成する実行ファイルの名前を指定します。<file-name> の拡張子を省略すると、実行ファイルの既定拡張子(.exe.com.hex など)が追加されます。

このオプションを指定しなければ、最初に指定したオブジェクト ファイル名の拡張子を実行ファイルの既定拡張子に取り替えた名前で実行ファイルが作成されます。

/H

最小の EXE 形式ファイルを作成します。/C を指定した場合、このオプションは無効です。

/HEX

インテル HEX 形式ファイルを生成します。「インテル HEX 形式」も参照してください。

/M[<file-name>]

マップ ファイルを作成します。<file-name> を省略すると、最初に指定したオブジェクト ファイル名の拡張子を「.MAP」に取り替えた名前でマップ ファイルが作成されます。マップ ファイルには、作成された実行ファイル内のセグメントの位置、サイズ、グローバル名の位置などが示されます。

/K<name>

ライブラリ検索パスを示す環境変数名を指定します。


LIL SAMPLE.OBJ /KLIBRARY

/L<path>

ライブラリを指定します。環境変数 LCLIB と同じ機能です。


LIL SAMPLE.OBJ /LC:\LIB\*.OBJ

<path> には、オブジェクト ファイルまたはライブラリ (.llb) ファイルを指定します。ワイルドカードも使用できます。

このオプションを指定すると、リンク対象のオブジェクト ファイルに解決できない外部名が含まれていた場合に <path> で指定したファイルが検索され、その名前を公開しているオブジェクト ファイルまたはライブラリ モジュールが自動的にリンクされます。

/PF

オプション /L で自動的にリンクされたオブジェクト ファイルの名前を表示します。

/PFL

オプション /L で指定されたオブジェクト ファイルを自動的にリンクする原因となった未解決名を表示します。

/R

警告メッセージが発生した場合に、戻り値 1 で LIL を終了します。通常は、エラーが発生した場合は戻り値 2、それ以外は戻り値 0 で OS に戻ります。

/RE0

エラーが発生しても、戻り値 0 で LIL を終了します。

/RL

HEX ファイル生成時に、拡張セグメント アドレス (ESA) レコードよりも拡張リニア (ELA) アドレス レコードを優先して使用します。「インテル HEX 形式」も参照してください。

/S<seg-name>=<seg-addr>[:<place>]

セグメント先頭のアドレスを絶対的に指定します。HEX ファイルを作成する場合にのみ有効です。

<seg-name> には、セグメント名を指定します。

<seg-addr> には、そのセグメントのアドレスを 4 桁の 16 進数で指定します。4 バイトの絶対アドレスではなく 2 バイトのセグメントのアドレスを指定します。その 16 倍が実効アドレスになります。この指定はアセンブラの SEGMENT 文の AT 属性に相当します。

<place> には、そのセグメント先頭のデータを配置するアドレスを 4 バイトの絶対アドレス (8 桁の 16 進数) で指定します。この指定はアセンブラの SEGMENT 文の PLACE_AT 属性に相当します。

<place> は、セグメントの実行時アドレスと配置アドレスを異なる値に指定するためのオプションです。その場合は、<addr> に実行時のアドレスを指定し、<place> に静的な配置アドレスを指定します。このようなセグメントは、<place> に配置するように HEX ファイルに書き込まれますが、そのセグメント内のラベルへの参照は、そのセグメントが <place> ではなく <addr> にあるかのように生成されます。このようなセグメントを実行するには、その前にセグメントの内容を <place> から <addr> に移動しておく必要があります。

配置アドレスの決定にもセグメントのアライン属性が影響しますが、PARA が下限です。したがって、<place> を使って配置するセグメントには、PARA 以上のアライン属性を指定してください。Light C の場合は -csp オプションも参照してください。

なお、同じセグメントに AT または PLACE_AT 属性と /S オプションの両方を指定すると、/S オプションの値が優先されます。

インテル HEX 形式」も参照してください。


LIL SAMPLE.OBJ /SCSEG=1A00
LIL SAMPLE.OBJ /SCSEG=1A00:F0000
LIL SAMPLE.OBJ /SS1=1A00:F0000 /SS2=:CNT

さらに例を示します。

LIL /HEX /SCODE=20C0 SAMPLE.OBJ

このコマンドは、セグメント CODE のセグメント アドレスを 20C0h に指定しています。これは、アセンブラのソースコードに次のように記述することと同等です。

CODE      SEGMENT AT 20C0h

この結果、セグメント CODE はセグメント アドレスの 20C0h、つまり実アドレスの 20C00h に置かれることになります。

/TSD<additional-size>

スタックの追加サイズを 10 進数で指定します。STACK コンバイン属性を持つセグメントの合計サイズに、この値が加算されて、SP レジスタの初期値が決定されます。

/U

大文字と小文字を区別します。

オブジェクト ファイル中の名前 (セグメント名やグローバル名など) を照合する際、通常 LIL は大文字と小文字の区別を行いませんが、このオプションが指定された場合は区別を行います。

/UE

未解決の外部参照があった場合でも、実行ファイルを作成します。

/Y

16 ビット版の LIL.EXE で、使用するメモリを約 50KB 節約します。メモリ不足エラーが発生する場合に指定します。それでもメモリ不足が解消しない場合は、32 ビット版の LIL32.EXE を使用してください。