アーカイブは、オブジェクトファイルを 1 つのファイルにまとめたものである。リンカにアーカイブを渡すと、リンカは必要なオブジェクトファイルをアーカイブから抽出し、オブジェクトファイルが直接渡されたかのように扱う。
アーカイブは ar コマンドで作成する。
$ ar cr archive.a obj1.o obj2.o
リンカの引数としてアーカイブが与えられた場合、リンカはその時点で未解決の外部参照(シンボル)をそのアーカイブから探そうとする。そのため、アーカイブのコマンドライン上の位置は重要である。
下記の場合、リンカが libtest.a を見つけたときには未解決のシンボルはない。一方、app.o の後にアーカイブは指定されてておらず、app.o 中のシンボルは解決されない。そのため、リンカエラーとなる。
$ gcc -o app -L. -ltest app.o
このように引数を構成すれば、正しくリンクされる。
$ gcc -o app app.o -L. -ltest