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 をこれでまとめてくれればいいと思った。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h