ページ 11

ライブラリ化について

Posted: 2014年4月27日(日) 17:35
by oyama
仕様を満たすプログラムを書き、それをコンパイルするmakefileを書け。関数は機能ごと別ファイルにしオブジェクトファイルをまとめてライブラリ化すること。(実行ファイル作成時にライブラリ化したものをリンクすること)
という問題を解きたいのですがライブラリ化をどうしたら良いのかよくわかりません。

現在は、仕様を満たすプログラムmain.c をつくりヘッダファイルと関数を機能ごと5つのファイルにするところまでは終了しています。
普通にコンパイルすると動作するのでここまで間違いはないと思います。

それ以降をどうすればよいのか教えてください。

Re: ライブラリ化について

Posted: 2014年4月27日(日) 17:38
by oyama
オブジェクトファイルをまとめてライブラリ化する

の部分を詳しく教えて欲しいです。

また、ライブラリ化したものの使い方を教えてください。


コンパイラはgccです

Re: ライブラリ化について

Posted: 2014年4月27日(日) 22:46
by Mana
機能ごと別ファイルにしたソースファイルをsub1.c、sub2.c、(以下略)とする。

gccコマンドに-cオプションを指定すると各ソースファイルごとにオブジェクトファイルを作成しリンクは行われない。
$>gcc -c sub1.c sub2.c
意味:sub1.o sub2.oを作成する

オブジェクトファイルをまとめてライブラリ化するにはarコマンドを使用する。
$>ar rv libsub.a sub1.o sub2.o
意味:sub1.o sub2.oをまとめたライブラリファイルlibsub.aを作成する
ライブラリファイル名は伝統的にlibで始まり末尾を.aをする。

ライブラリファイルの使用方法は以下のとおり
$>gcc main.c libsub.a
main.cのコンパイルでmain.oが作成され、必要であればlibsub.aに含まれるオブジェクトファイルがリンクされ、実行ファイルが作成される。
ライブラリファイルがライブラリパス上に存在するなら-lオプションでライブラリを指定することもできる。
libsub.aがライブラリパス上に存在する場合
$>gcc main.c -lsub
でひとつ上のコマンドラインと同様に機能する。

Re: ライブラリ化について

Posted: 2014年5月01日(木) 13:14
by oyama
丁寧な解説有難う御座います。

解決しました。