鸿蒙(OpenHarmony)编译移植第三方库ffmpeg

本文非官方教程,纯属业余折腾

官方教程链接:https://device.harmonyos.com/cn/docs/develop/transplant/transplant-thirdparty-makefile-0000001064218672

一、文件准备

1. ffmpeg源码下载(本文用的n4.4)

https://github.com/FFmpeg/FFmpeg/tags

2. 官方sysroot和llvm下载
  • sysroot目录: 克隆仓库并切到OpenHarmony-v2.2-Beta分支

git clone git@gitee.com:openharmony/prebuilts_lite_sysroot.git --branch OpenHarmony-v2.2-Beta

  • 编译器: llvm

wget https://repo.huaweicloud.com/harmonyos/compiler/clang/10.0.1-62608/linux/llvm.tar.gz -O ./llvm.tar.gz

3. 编译工具说明
  • 关于sysroot目录,用到2个文件夹,内含平台相关的基础库,参与编译时使用-I和-L配置到cflags

sysroot/usr/include/arm-liteos
sysroot/usr/lib/arm-liteos

  • llvm常用到的几个工具

llvm/bin/clang // 相当于我们熟悉的gcc
llvm/bin/clang++
llvm/bin/llvm-ar
llvm/bin/llvm-as
llvm/bin/llvm-nm
llvm/bin/llvm-strip
llvm/bin/llvm-ranlib
llvm/bin/llvm-objdump
llvm/bin/ld.lld

  • llvm作为编译器自带两个库目录,内涵基础c/c++库,同样使用-I和-L配置到cflags

llvm/include
llvm/lib

  • 最后是官方提到的配置项,也添加到cflags,这里的OHOS_ROOT_PATH当然就是上面clone下载的sysroot目录啦

–target=arm-liteos -march=armv7-a --sysroot=$(OHOS_ROOT_PATH)

二、编译

1. 文件准备如图

在这里插入图片描述

2. 编写 Makefile

ROOT = $(shell pwd)
INSTALL = $(ROOT)/install

# sdk
SYSROOT = $(ROOT)/sysroot
LLVM = $(ROOT)/llvm

# compile
CLANG = $(LLVM)/bin/clang
CLANGXX = $(LLVM)/bin/clang++
AR = $(LLVM)/bin/llvm-ar
AS = $(LLVM)/bin/llvm-as
NM = $(LLVM)/bin/llvm-nm
RANLIB = $(LLVM)/bin/llvm-ranlib
STRIP = $(LLVM)/bin/llvm-strip
OBJDUMP = $(LLVM)/bin/llvm-objdump
LD = $(LLVM)/bin/ld.lld

# cflags
OHOS_CFLAGS = --target=arm-liteos -march=armv7-a --sysroot=$(SYSROOT)
OHOS_CFLAGS += -I$(SYSROOT)/usr/include/arm-liteos
OHOS_CFLAGS += -L$(SYSROOT)/usr/lib/arm-liteos
OHOS_CFLAGS += -I$(LLVM)/include
OHOS_CFLAGS += -L$(LLVM)/lib

ffmpeg:
	@mkdir -p $(INSTALL) && \
	tar -xzf $(ROOT)/FFmpeg-n4.4.tar.gz -C $(INSTALL) && \
	cd $(INSTALL)/FFmpeg-n4.4 && \
	./configure \
		--prefix=$(INSTALL) \
		--arch=armv7-a \
		--target-os=linux \
		--disable-asm \
		--disable-programs \
		--disable-avdevice \
		--enable-cross-compile \
		--enable-small \
		--enable-shared \
		--cc=$(CLANG) \
		--ld=$(CLANG) \
		--strip=$(STRIP) \
		--extra-cflags="$(OHOS_CFLAGS) $(OHOS_INCS) $(OHOS_LIBS)" \
		--extra-ldflags="$(OHOS_CFLAGS) $(OHOS_INCS) $(OHOS_LIBS)" && \
	make -j4 && make install && \
	cd - && \
	rm -rf $(INSTALL)/FFmpeg-n4.4

3. 编译

make ffmpeg

  • 编译结束生成依赖库和头文件到install目录

在这里插入图片描述

三、总结

1. 基本套路
  • 利用configure的CC、cc、–cc、CFLAGS、–extra-cflags等替换编译工具以及添加cflags,有些库–help时可能见不到这些参数,但不妨试试,有些只是没有显示而已;

  • 遇到没法通过configure配置的,可以先配置成arm交叉编译器,再通过sed替换Makefile、.mk、.mak文件中的编译器和cflags;

2. 检查生成文件
  • 使用file指令检查.o、.so文件的编译器信息,时常检查,避免多重依赖时链接检查不通过;以上面编译生成的文件为例,正确结果如图,否则可能使用了系统gcc;
    在这里插入图片描述
3. 其它问题
  • OpenHarmony系统中已存在部分ffmpeg库文件,混用可能存在链接错乱问题,不知道通过修改ffmpeg库名称或使用-Wl,-soname可否避免。
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值