ライブラリ化について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
oyama

ライブラリ化について

#1

投稿記事 by oyama » 12年前

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

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

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

oyama

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

#2

投稿記事 by oyama » 12年前

オブジェクトファイルをまとめてライブラリ化する

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

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


コンパイラはgccです

Mana

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

#3

投稿記事 by Mana » 12年前

機能ごと別ファイルにしたソースファイルを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
でひとつ上のコマンドラインと同様に機能する。

oyama

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

#4

投稿記事 by oyama » 12年前

丁寧な解説有難う御座います。

解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る