这次编译的是ffmpeg 4.1.7 arm64-vba版本
下载地址:https://ffmpeg.org/download.html
【前置条件】:
- 已经部署好ndk, 使用:android-ndk-r21e
- 编译环境:Ubuntu 16.04.2 LTS
export NDK=/home/share/ide/android-ndk-r21e export SYSROOT=$NDK/platforms/android-21/arch-arm64/ export TOOLCHAIN=/home/share/ide/my-android-toolchain64 export PATH=$TOOLCHAIN/bin:$PATH export CC=aarch64-linux-android-gcc export CPP=aarch64-linux-android-g++ export LD=aarch64-linux-android-ld export AR=aarch64-linux-android-ar export STRIP=aarch64-linux-android-strip3、配置文件
创建sh脚本执行:build_android.sh
#!/bin/bash #!/bin/bash CFLAGS="-O3 -Wall -marm -pipe -fpic -fasm -finline-limit=300 -ffast-math -fstrict-aliasing -Werror=strict-aliasing -fmodulo-sched -fmodulo-sched-allow-regmoves -Wno-psabi -Wa,--noexecstack -DANDROID -DNDEBUG" EXTRA_CFLAGS="-mfpu=neon -mfloat-abi=softfp" FFMPEG_FLAGS="--prefix=./android-ffmpeg-install --target-os=linux --arch=arm64 --enable-cross-compile --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- --enable-static --disable-ffplay --disable-ffprobe --enable-shared --disable-symver --disable-doc --disable-encoders --disable-devices --enable-protocols --enable-parsers --enable-demuxers --disable-demuxer=sbg --enable-decoders --enable-bsfs --enable-network --enable-swscale --enable-neon --enable-asm --enable-gpl --enable-pthreads --disable-linux-perf --enable-version3" ./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS"4、执行
make -j8
5、合成输出 ffmpeg.so创建sh脚本执行: combine.sh
#!/bin/bash EXTRA_CFLAGS="-march=arm64-v8a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad" #rm libavutil/log2_tab.o #rm libavcodec/log2_tab.o #rm libavformat/golomb_tab.o #rm libavformat/log2_tab.o #rm libswresample/log2_tab.o #rm libswscale/log2_tab.o #rm libavfilter/log2_tab.o #rm -rf libavcodec/reverse.o $CC -lm -lz -shared --sysroot=$SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $EXTRA_LDFLAGS libavutil/log2_tab.c libavutil/*.o libavutil/aarch64/*.o libavcodec/*.o libavcodec/aarch64/*.o libavcodec/neon/*.o libavformat/*.o libswresample/*.o libswresample/aarch64/*.o libswscale/*.o libswscale/libswscale.a compat/*.o -o libffmpeg.so $STRIP -g libffmpeg.so6、错误记录 6.1、64位报错
报错: aarch64-linux-android-gcc is unable to create an executable file. C compiler test failed. ffbuild/config.log查看报错: clang90: error: unknown argument: '-mvectorize-with-neon-quad' clang90: error: the clang compiler does not support '-march=arm64-v8a'
解决:64位编译不要设置以下两个参数
-mvectorize-with-neon-quad:由于GCC 4.4只对双字自动向量化,加了这个就可以对四字了 -march=xxxx6.2、64位报错
libavcodec/hevc_mvs.c:368:23: error: use of undeclared identifier 'y0000000'
is_available_b0 = AVAILABLE(cand_up_right, B0) &&
^
libavcodec/hevc_mvs.c:274:16: note: expanded from macro 'AVAILABLE'
(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))
^
libavcodec/hevc_mvs.c:208:15: note: expanded from macro 'TAB_MVF_PU'
((y ## v) >> s->ps.sps->log2_min_pu_size))
^
:332:1: note: expanded from here y0000000
^
libavcodec/hevc_mvs.c:368:23: error: use of undeclared identifier 'x0000000'
libavcodec/hevc_mvs.c:274:16: note: expanded from macro 'AVAILABLE'
(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))
^
libavcodec/hevc_mvs.c:207:15: note: expanded from macro 'TAB_MVF_PU'
TAB_MVF(((x ## v) >> s->ps.sps->log2_min_pu_size),
解决:配置文件传参
--disable-linux-perf
解决参考:
https://github.com/android/ndk/issues/630



