その前に、前回のコンパイル方法をもう一度載せる。
$ gcc -shared mylib.c -o libmylib.so
実はこれ以外にももう一つコンパイル方法がある。
$ gcc mylib.c -c
$ gcc -shared mylib.o -o libmylib.so
このようにオブジェクトファイルを介してでもコンパイルは成功する。$ gcc -shared mylib.o -o libmylib.so
なので、例えばmylib1.c, mylib2.c, mylib3.cと複数のソースファイルを作ったときは、libmylib1.so, libmylib2.so, libmylib3.soと別々にライブラリファイルを作ってもいいけど、
$ gcc -shared mylib1.o mylib2.o mylib3.o -o libmylib.so
で一括して1つのライブラリファイルとして管理することもできる。さらに、次のように書いたMakefileを自作ライブラリのフォルダに入れておく。
CC=gcc
CFLAGS=-g -Wall
OBJS=mylib1.o mylib2.o mylib3.o
all: libmylib.so
libmylib.so: $(OBJS)
$(CC) -shared -o libmylib.so $(OBJS)
CFLAGS=-g -Wall
OBJS=mylib1.o mylib2.o mylib3.o
all: libmylib.so
libmylib.so: $(OBJS)
$(CC) -shared -o libmylib.so $(OBJS)
mylib1.o: mylib1.h mylib1.c
$(CC) $(CFLAGS) -c mylib1.c
$(CC) $(CFLAGS) -c mylib1.c
mylib2.o: mylib2.h mylib2.c
$(CC) $(CFLAGS) -c mylib2.c
mylib3.o: mylib3.h mylib3.c
$(CC) $(CFLAGS) -c mylib3.c
clean:
rm $(OBJS) libmylib.so
$(CC) $(CFLAGS) -c mylib3.c
clean:
rm $(OBJS) libmylib.so
これで、もしソースファイルに更新があった場合はmakeするだけでライブラリを更新してくれる。
前回で僕がヘッダファイルもライブラリファイルもめんどくさいから一緒のフォルダで管理していると書いたのは、別にするとMakefileの記述が面倒になるからなのである。
これは最近思いついた方法やけど便利。
0 件のコメント :
コメントを投稿