• ベストアンサー

静的ライブラリについて教えて下さい

静的ライブラリについて教えて下さい。作成方法は大体わかったのですが、使い方と利用シーンがわかりません。例えば、 -main.c- #include <stdio.h> #include "abc.h" int main(){ a(); b(); c(); } -a.c- #include <stdio.h> void a(void){ printf("a\n"); } -b.c- #include <stdio.h> void b(void){ printf("b\n"); } -c.c- #include <stdio.h> void c(void){ printf("c\n"); } -abc.h- void a(void); void b(void); void c(void); というファイルを作成した上で以下のようにコンパイルしました。 gcc -c a.c gcc -c b.c gcc -c c.c これで、a.o, b.o, c.oというオブジェクトファイルが出来ました。 次にar rcs static a.o b.o c.oとコマンドを打ったところ、問題なくstaticという静的ライブラリと思われるファイルが出来ました。で、そもそもですがこの使い方がわかりません。main.cをコンパイルする際に使うのでしょうか?そもそも上で作成した静的ライブラリにはmain.oも含めるべきものでしょうか?初歩的な質問ですみません。宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

gccとldなら、実行ファイルを作成する段階でリンクライブラリとして指定すれば取り込まれます。 使用ケースについては↓参照。 http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA #要は「作ったものの使い回し」です 複数のプログラムで使い回すのが目的なので、main()を含んではいけません。 #というかmain()って含めるんだっけ?arはただのアーカイブだから行けそうな気もするけど……

rio_grande
質問者

補足

有り難うございました。以下のようにコマンドを打つと問題なく実行可能ファイルが生成されました。 gcc main.o -L. static -lutil -o a.out (staticはar rcs static a.o b.o c.oで作成した静的ライブラリファイル) 結局何が利点だったのかがぼんやりしているのですが、本来なら gcc -o a.out main.o a.o b.o c.o と3つのオブジェクトファイルを指定すべきところを、staticファイルを1つだけリンクすればいいので、(対象ファイル数が減って)楽、ということなのでしょうか。 そうすると、静的ライブラリとはオブジェクトファイルを単にアーカイブ化するだけである、という理解でよいのでしょうか。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

とりあえず静的ライブラリなら libなんちゃら.a という名前を付けておくと便利. で使い方ですが, 「ライブラリ」なので基本的には #1 の通り「いろんなプログラムで使いまわす」ことになります. そういうことですから, 普通は main 関数を入れることはありません. とはいえもちろん例外はあって, たとえば YACC で使うライブラリには main が入っていたはずです.

関連するQ&A