thin archive
とかいうファイル形式が GNU binutils に足されてたみたい。
http://sourceware.org/ml/binutils/2008-03/msg00150.html
- 2つ以上の相互依存する .a ファイルがセットで使われるようなケースでは、 --start-group libhoge.a libfuga.a --end-group とか普通はするけど、それめんどくさいからまとめたファイル作れるといいよね
- .a ファイルを単に大きなプロジェクト内で、複数の .o ファイルをまとめる用途だけのために使ってる場合に、わざわざ全内容をコピーした .a ファイルを作るのはディスクの無駄だよね
という二つの問題を同時に解決するために導入されたらしい。実現は単に ar の形式から実体取り除いただけ、みたいな感じっぽい。ヘッダは !
% ar rcsT ab.a a.o b.o
とかいう感じで、 T をつければいいみたい。以下に使ってみた例。 ab.a は 274 バイトとかで小さいことがわかる。結構便利かも。
i@u4 ~/test > cat a.c #include <stdio.h> void a() { printf("a()\n"); } i@u4 ~/test > cat b.c #include <stdio.h> void b() { printf("b()\n"); } i@u4 ~/test > cat main.c void a(); void b(); int main() { a(); b(); } i@u4 ~/test > gcc -c a.c b.c main.c i@u4 ~/test > ar rcsT ab.a a.o b.o i@u4 ~/test > ls -l ab.a -rw-r--r-- 1 i i 274 Apr 7 00:23 ab.a > gcc main.c ab.a i@u4 ~/test > ./a.out a() b()
というわけで GHC は libHSbase と libHSrts をこれでまとめてくれればいいと思った。