2010年9月22日水曜日

gccでライブラリ

gccで使えるライブラリ(.a)の作成方法のメモ。
以下、cygwinで試した結果。

-- a1.c --
int AAA=123;
----------
コンパイルする。
$ gcc -c a1.c

できあがった内容を見る。
$ nm -g a1.o
00000000 D _AAA

ライブラリをarで作る。
$ ar -r a.a a1.o
ar: creating a.a

できた内容をチェック。
$ nm -sg a.a
Archive index:
_AAA in a1.o

a1.o:
00000000 D _AAA

インデックスを作ったほうがリンクが速くなるらしい。
既にインデックスができてそうだが、調べた範囲では
ar -r に続いて ar -s を実行するのが通常のようだ。

そこで一応、実行して見る。インデックスを作るには、
ranlib か ar -s を実行する。この2つのコマンドは
等価とのこと。
http://www.linux.or.jp/JM/html/GNU_binutils/man1/ar.1.html

実行してみる。
$ ar -s a.a
$ nm -sg a.a
Archive index:
_AAA in a1.o

a1.o:
00000000 D _AAA

変化なし。必要なのだろうか?

最後に、できあがったa.aをリンクする。
-- main.c --
#include <stdio.h>
int main(void)
{
printf("%d\n",AAA);
}
というファイルを作って、コンパイル&リンク&実行すると、
$ gcc main.c a.a
$ ./a.exe
123

となる。

0 件のコメント :