將海思平台相关的代码打包成静态库

目标

对海思平台相关的功能抽象成接口,并打包成静态库文件有益于业务代码的跨平台复用,本文介绍我的做法.

结构介绍

将平台相关的接口如音频采集与视频采集抽象为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 分为三步:

  1. 将所有的 .c 文件编译为.o文件.
  2. 将所有的海思的官方静态库文件解压为.o文件,放在objs/目录下
  3. 将所有的.o文件通过AR命令打包为libplatform.a.

猜你喜欢

转载自blog.csdn.net/chenxiemin/article/details/106532532