10.5 リンカ(linker)

  1.リンカ:ld(あるいはcollect2)の解説
 ldはGNU リンカです。ldは複数のオブジェクトファイルやライブラリ・書庫(archive)ファイルを結合し、それらのデータをリロケートして、シンボルの参照をまとめます。新たな実行プログラムをコンパイルして作成する作業の最終ステップは、多くの場合ldの呼び出しとなります。

 ldの本バージョンではオブジェクトファイル関連の作業に汎用のBFD ライブラリを用いています。これによってldでは多くの異なるフォーマットのオブジェクトファイルを読み、書き、結合することができるようになっています(例えばCOFF形式やa.out形式など)。このため、異なるフォーマットをリンクして、あらゆる種類のオブジェクトファイルを作成可能です。

 例としてhello.oファイルをリンクしてa.outを生成する作業は以下のようになります。
# ld -o a.out /usr/lib/crt1.o /usr/lib/crti.o hello.o -lc
 この例ではldにa.outという名前のファイルを作成するように指示しています。リンクするファイルは/lib/crt1.o、/usr/lib/crti.o、hello.oおよび標準的な検索ディレクトリにある標準ライブラリlibc.aです。

 リンクする(複数の)オブジェクトファイルはobjfileとして与えますが、これはコマンドラインでオプションの後、前、あるいは混ぜて置いても構いません。ただしobjfieをオプションのフラグとその引数の間に置くことはできません。

 通常リンカの実行には最低一つのオブジェクトファイルが指定されるが、異なるフォーマットを持つバイナリファイルを-l、-Rやスクリプトコマンド言語で指定することもできます。