一、下载Harmony交叉编译工具
image.png
二、FFmpeg源码下载
下载tag版本n6.0、master编译不成功。
https://github.com/FFmpeg/FFmpeg/releases/tag/n6.0
三、修改交叉编译环境
将以下脚本放到ohos-sdk/native/llvm/bin目录下
aarch64-linux-ohos-clang
#!/bin/bash
bin_dir=`dirname "$0"`
if [ "$1" != "-cc1" ]; then
"$bin_dir/clang" --target=aarch64-linux-ohos "$@"
else
# Target is already an argument.
"$bin_dir/clang" "$@"
fi
aarch64-linux-ohos-clang++
#!/bin/bash
bin_dir=`dirname "$0"`
if [ "$1" != "-cc1" ]; then
"$bin_dir/clang++" --target=aarch64-linux-ohos "$@"
else
# Target is already an argument.
"$bin_dir/clang++" "$@"
fi
arm-linux-ohos-clang
#!/bin/bash
bin_dir=`dirname "$0"`
if [ "$1" != "-cc1" ]; then
"$bin_dir/clang" --target=arm-linux-ohos "$@"
else
# Target is already an argument.
"$bin_dir/clang" "$@"
fi
arm-linux-ohos-clang++
#!/bin/bash
bin_dir=`dirname "$0"`
if [ "$1" != "-cc1" ]; then
"$bin_dir/clang++" --target=arm-linux-ohos "$@"
else
# Target is already an argument.
"$bin_dir/clang++" "$@"
fi
四、ffmpeg交叉编译脚本
set -x
# 目标HarmonyOS版本
# 编译arm64-v8a 配置CPU为aarch64
# 编译armeabi-v7a 配置CPU为arm
CPU=aarch64
#so库输出目录
OUTPUT=$(pwd)/harmonyos/$CPU
OH_SDK=/home/android/ohos-sdk/linux
# 编译环境
SYSROOT=$OH_SDK/native/sysroot
CC=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
STRIP=$OH_SDK/native/llvm/bin/llvm-strip
LD=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
OPTIMIZE_CFLAGS="-march=$CPU"
HOST_CC=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
HOST_LD=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
HOST_LD_FLAG=-L/home/android/ohos-sdk/linux/native/sysroot/usr/lib/$CPU-linux-ohos
function build
{
./configure \
--prefix=$OUTPUT \
--target-os=linux \
--cpu=$CPU \
--disable-asm \
--enable-cross-compile \
--disable-x86asm \
--enable-shared \
--enable-static \
--disable-doc \
--disable-htmlpages \
--disable-optimizations \
--cc=$CC \
--ld=$LD \
--strip=$STRIP \
--sysroot=$SYSROOT \
--host-cc=$HOST_CC \
--host-ld=$HOST_LD \
--host-os=linux \
--host-ldflags=$HOST_LD_FLAG \
--extra-cflags="-Os -fpic" \
--disable-vulkan \
--disable-stripping
make clean all
# 这里是定义用几个CPU编译
make -j8
make install
}
build