將海思平台相关的代码打包成静态库
目标
对海思平台相关的功能抽象成接口,并打包成静态库文件有益于业务代码的跨平台复用,本文介绍我的做法.
结构介绍
将平台相关的接口如音频采集与视频采集抽象为libplatform, 对上层打包为libplatform.h与libplatform.a.首先在mpp/sample目录下,参考venc,创建platform文件夹,platform目录下的Makefile如下:
include ../Makefile.param SRCS := $(wildcard *.c) SRCS += $(wildcard $(PWD)/adp/*.c) TARGET := libplatform.a TARGET_PATH := $(PWD) CFLAGS += -fPIC -shared -funwind-tables -ggdb CFLAGS += -L$(REL_LIB) -lsecurec -Wl,-rpath=/usr/lib CFLAGS += $(COMM_INC) OBJS := $(SRCS:%.c=%.o) STATIC_LIBS := $(REL_LIB)/libive.a $(REL_LIB)/libivp.a $(MPI_LIBS) $(SENSOR_LIBS) $(AUDIO_LIBA) $(REL_LIB)/libsecurec.a $(REL_LIB)/librtspserver.a define TOOL_install sh -c "cd ./objs && $(AR) -xv $(1)"; endef .PHONY : clean all all: $(TARGET) $(TARGET) : $(COMM_OBJ) $(OBJS) mkdir -p objs $(foreach tool,$(STATIC_LIBS),$(call TOOL_install,$(tool))) $(AR) -rc $(TARGET_PATH)/$@ $^ ./objs/*.o clean: @rm -f $(TARGET_PATH)/$(TARGET) @rm -f $(OBJS) @rm -f $(COMM_OBJ) cleanstream: @rm -f *.h264 @rm -f *.h265 @rm -f *.jpg @rm -f *.mjp @rm -f *.mp4 @rm -rf objs
Makefile说明
Target
定义要生成的静态库文件 libplatform.a:
TARGET := libplatform.a
源码
定义要编译的.c文件为:
SRCS := $(wildcard *.c) SRCS += $(wildcard $(PWD)/adp/*.c)
依赖
定义依赖的海思官方静态库文件:
STATIC_LIBS := $(REL_LIB)/libive.a $(REL_LIB)/libivp.a $(MPI_LIBS) $(SENSOR_LIBS) $(AUDIO_LIBA) $(REL_LIB)/libsecurec.a $(REL_LIB)/librtspserver.a
CFLAG
添加自定义的CFLAGS
CFLAGS += -fPIC -shared -funwind-tables -ggdb CFLAGS += -L$(REL_LIB) -lsecurec -Wl,-rpath=/usr/lib CFLAGS += $(COMM_INC)
编译
编译libplatform.a 分为三步:
- 将所有的 .c 文件编译为.o文件.
- 将所有的海思的官方静态库文件解压为.o文件,放在objs/目录下
- 将所有的.o文件通过AR命令打包为libplatform.a.
