リンカーとライブラリ

リンカーオプションの指定

リンカーに対するオプションは、通常、コンパイラドライバのコマンド行を通じて渡されます。コンパイラオプションとリンカーオプションは、ほとんど重複する部分はありません。重複が発生した場合は、通常、特定のオプションをリンカーに渡すことを許可するコマンド行構文が、コンパイラドライバによって提供されます。また、LD_OPTIONS 環境変数を設定して、リンカーにオプションを渡すこともできます。次に例を示します。


$ LD_OPTIONS="-R /home/me/libs -L /home/me/libs" cc -o prog main.c -lfoo

-R および -L オプションがリンカーによって変換され、コンパイラドライバから受信したコマンド行オプションに付加されます。

リンカーは、オプションリスト全体を構文解析し、無効なオプションまたは関連する引数が無効であるオプションを調べます。どちらかの無効なオプションが検索された場合は、該当するエラーメッセージが生成されます。致命的なエラーの場合は、リンカーは強制終了します。次の例では、リンカーの検査により、不当なオプション -X が認識され、-z オプションに不当な引数が検出されています。


$ ld -X -z sillydefs main.o
ld: illegal option -- X
ld: fatal: option -z has illegal argument `sillydefs'

1 つの引数を必要とするオプションが、誤って 2 回指定されている場合には、リンカーは該当する警告を表示しますが、リンク編集は継続します。次に例を示します。


$ ld -e foo ...... -e bar main.o
ld: warning: option -e appears more than once, first setting taken

また、リンカーはオプションリストを調べて重大な不一致も検出します。次に例を示します。


$ ld -dy -a main.o
ld: fatal: option -dy and -a are incompatible

すべてのオプションを処理しても、エラー状態が検出されなかった場合は、次にリンカーは、入力ファイルの処理を行います。

通常使用されるリンカーオプションについては、付録 A 「リンカーのクイックリファレンス」 を参照してください。また、全リンカーオプションの詳細については、ld(1) のマニュアルページを参照してください。