とかいうファイル形式が 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 をこれでまとめてくれればいいと思った。