(2019年11月15日,更新) 改訂版を新しく書きました
pyopyopyo.hatenablog.com
2つの static library, libX.a と libY.a を結合して libZ.a を生成するには
$ ar cqT libZ.a libX.a libY.a
で一旦 thin archive形式の libZ.a を生成し,
$ echo "create libZ.a\naddlib libX.a libY.a\nsave\nend" | ar -M
再度 ar コマンドを使って通常のarchive形式に変換します
同じ手続きを Makfile に書くときは
libZ.a: libX.a libY.a $(RM) $@ $(AR) cqT $@ $^ echo "create $@\naddlib $@\nsave\nend" | ar -M
とします
動作原理
仕組みとしては
$ ar cqT libZ.a libX.a libY.a
で,まず一時的なライブラリとして libZ.a を生成します
この libZ.a は thin archive 形式で作成されていて
- シンボルテーブル
- 元ファイルのパス名
のみを保持していて,データやコードの実体は含んでいません
次に thin archive 形式のライブラリを ar コマンドで変換します.ar コマンドに "-M "オプションを付与して ar をインタプリタモードで起動し,以下のプログラムを実行します
create libZ.a addlib libZ.a save end
これで新しい libZ.a を作成し,データやコードも含んだ スタティックライブラリを出力します