リンカーとライブラリ

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

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


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

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

リンカーは、オプションリスト全体を構文解析し、無効なオプションまたは関連する引数が無効なオプションを検索します。これらの無効なオプションのどちらかが検出された場合は、該当するエラーメッセージが生成され、さらにこのエラーが深刻なものである場合には、リンカーは自動的に終了します。次に例を示します。


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

この例では、リンカーの検査により、不当なオプション -X が認識され、-z オプションに不当な引数が検出されました。1 つの引数を必要とするオプションが、誤って 2 回指定されている場合には、リンカーは該当する警告を表示しますが、リンク編集は継続します。次に例を示します。


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

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


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

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

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