如何在linux下编写动态库查查362

如何在linux下编写动态库查查362,第1张

TARGET = client # 这里修改你的库名

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文件,只会拷贝需要的部分。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8588038.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存