编译一个lib,网上的由.a文件合成libffmpeg时脚本很多都是有各种错误,下面是亲自测试
//下面是window平台编译,环境搭建 https://blog.youkuaiyun.com/eydwyz/article/details/78192392
// linux平台修改相应的变量即可
// 解压ffmpeg-3.3.4,由于不生成各模块的so,故无需更改configure,
//执行 ./build_android.sh
// 生成不了 单一库 error: cannot open libpostproc/libpostproile or directory ,,把make install 后面一句的libpostproc/libpostproc.a 删除即可
build_android.sh
#!/bin/bash
NDK=D:/android_ndk/android-ndk-r11c-windows-x86_64/android-ndk-r11c
SYSROOT=$NDK/platforms/android-18/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
PLATFORM=$NDK/platforms/android-18/arch-arm
function build_one {
./configure \
--prefix=$PREFIX \
--enable-asm \
--enable-neon \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_dxva2 \
--enable-hwaccel=mpeg4_vaapi \
--enable-hwaccels \
--enable-jni \
--enable-mediacodec \
--disable-stripping \
--disable-shared \
--enable-static \
--disable-doc \
--enable-ffmpeg \
--enable-ffplay \
--enable-ffprobe \
--enable-ffserver \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
$PREBUILT/windows-x86_64/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libswresample/libswresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a libpostproc/libpostproc.a libavdevice/libavdevice.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9/libgcc.a
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
后面可以使用调试,不过,有时调试时参数不对,应该是as问题
add-dsym C:\ffmpeg-3.3.4\android\arm\libffmpeg.so
settings set target.source-map C:\ffmpeg-3.3.4 D:\example_ndk\ffmpeg_source_map\app\src\main\cpp\ffmpeg-3.3.4