
TARGET_LIB = $(TARGET:%=lib%.a)
CROSSCOMPILER =#arm-hisiv200-linux-
CC = $(CROSSCOMPILER)gcc
AR = $(CROSSCOMPILER)ar
CFLAGS = #-DDEBUG
INCS = -I./
LIBS = -lpthread
SOURCES = main.c #这里添加你的c文件
OBJECTS = $(SOURCES:.c=.o)
all: $(TARGET_LIB) #$(TARGET) #修改这里可以更改编译目标
$(TARGET) : $(OBJECTS)
$(CC) -O2 -o $@ $(INCS) $(CFLAGS) $^ $(LIBS)
$(TARGET_LIB) : $(OBJECTS)
$(AR) -rv -o $@ $^
%.o:%.c
$(CC) -O2 -c -o $@ $(INCS) $(CFLAGS) $^
clean:
@rm -vrf $(TARGET) $(TARGET_LIB) $(OBJECTS)
#注意百度把tab自动删除了要补上
1、虽然动态库有点浪费内存,但是动态库最大的作用是:减少占用磁盘空间,减少开发时的编译时间,而不是你想的编译速度慢。因为采用了动态库,所以如果我修改了动态库,我只需要编译动态库。而如果采用了静态库,如果修改了静态库,那么,所有用了该静态库的程序和静态库都必须重新编译。而且gcc不是扫描整个libc.so文件。因为so文件里有符号表,哪个符号在哪个.o文件里,只要扫描符号表就知道了,而且由于他不需要从so文件中拷贝使用的函数,从某种意义上来说编译速度比静态库更快。2、动态库的加载采用写时拷贝技术,即:只有当我用这个函数的时候我才把该函数部分拷贝过来,它不会拷贝整个so文件,只会拷贝需要的部分。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)