コンパイラが認識できない引数がコマンド行で指定された場合、リンカーオプション、オブジェクトプログラムのファイル名、またはライブラリ名の可能性があるとして解釈されます。
基本的には次のように区別されます。
認識されないオプション (- が付いている) には、警告メッセージが出力されます。
認識されない非オプション (- が付いていない) には、警告メッセージが出力されません。ただし、これらのオプションがリンカーに渡されて、リンカーに認識されない場合には、リンカーエラーメッセージが出力されます。
例:
demo% f95 -bit move.f <- -bit は f95 オプションとして認識されません。 f95: 警告: ld が起動される場合は、オプション -bit は ld に渡されます。 それ以外は無視されます。 demo% f95 fast move.f <- 入力ミス (-fast と入力しようとした) ld: fatal: ファイル fast: ファイルをオープンできません: ファイルもディレクトリもありません。 ld: fatal: ファイル処理エラー。a.out へ書き込まれる出力がありません。 |
最初の例では、-bit は f95 では認識されず、このオプションはこれを解釈しようとするリンカー (ld) に渡されます。ld では 1 文字のオプションを続けて並べることもできるため、-bit が -b -i -tと解釈されます。-b、-i、-t はいずれも ld の有効なオプションであるからです。これは、ユーザーが意図している場合と、意図していない場合とがあります。
2 つ目の例では、f95 の共通のオプションとして -fast を指定しようとしていますが、先頭のハイフンが抜けています。この場合も、コンパイラは引数をリンカーに渡し、リンカーはこれをファイル名と解釈します。
前述の例から、コンパイラコマンドを指定する場合には、十分な注意が必要であることがわかります。