|
发表于 2007-12-5 15:04:01
|
显示全部楼层
下面是一个makefile ,用与创建使用动态库的程序和动态库:
CFLAGS=-wALL -L
libcflags=$(CFLAGS) -D_REENTRANT -fPIC #这行定义了预处理符号(_REENTRANT),并且产生与位置无关的代码(-fPIC),由于库是在运行的时候被调入,所以这是必须的
CC=gcc
OBJS=myprogram.o
LIBOBJS=safecalls.o safecalls2.o
AR=ar rc
LIBRARY=libsafec.so.1.0.0
SONAME=libsafec.so.1
all:myprogram
myprogram: $(OBJS) $(LIBRARY)
$(CC) $(CFLAGS) -O $@ myprogram.o -lsafec
$(LIBRARY) (LIBOBJS)
$(CC) -shared -W1,-soname, $(SONAME) -O $ @ $(LIBOBJS) -lc#-share表示产生共享代码,-W1使得后面的选项被传递给连接器(-soname libsafec.so.1)
ln -sf $ @ libsafec.so
ln -sf $ @ $(SONAME)#上两行创建了两个链接符,并且装载库进入程序
myprogram.o:myprogram.c
$(CC) $(CFLAGS) -c -o $@ $<
%.o:%.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
-rm $(OBJS) $(LIBOBJS) $(LIBRARY) libsafec.so $(SONAME) myprogram |
|