目标
对海思平台相关的功能抽象成接口,并打包成静态库文件有益于业务代码的跨平台复用,本文介绍我的做法.
结构介绍
将平台相关的接口如音频采集与视频采集抽象为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.