环境:
1.编译环境Ubuntu 64位
2.ndk版本19c
3.FFmpeg版本4.1.3
脚本:
set -x
API=14
NDK=/home/bobby/Downloads/android-ndk-r17c
SYSROOT=$NDK/platforms/android-$API/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armv7-a
PREFIX=$(pwd)/android/$CPU
_one()
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-ffmpeg \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a -isysroot $NDK/sysroot" \
--enable-neon
make clean all
make
make install
}
_one
问题总结:
1.编译失败不是网上说的各种FFmpeg和NDK版本问题,本人亲自踩过各种坑,大厂的东西不用怀疑,出问题就是在脚本上面,上面的脚本适用于打包Android环境下的so包
2.如果遇到编译失败,首先请检查你的shell脚本是否正确,先吐槽下目前网上的编译总结版本并不多,基本上雷神的版本占了6成以上,如果你遇到了编译的时候提示XXX.h找不到等问题,请在–extra-cflags中添加 “-isysroot $NDK/sysroot”即可
3.上面脚本打的是so包,如果想要.a包,请把disable-static换成disable-shared,enable-shared换成enable-static,具体编译规则最后总结会单独提出总结
4.FFmpeg的configure看情况自己去调整,不要一股脑照抄,抄来的并不一定适合
PS:如果有其他问题请在留言区提问交流
脚本规则:
1.--prefix=$PREFIX \ 输出编译路径
2. --enable-shared \ --disable-static \ 输出编译so包还是.a包(.a包是静态static,so包是动态shared),根据情况自行调整
3.--target-os=android \ 编译输出运行的环境,网上大多数都是Linux,根据情况自己写需要编译后运行的环境
上面3条是相对比较重要的,下面不编序号是可选,根据自己情况自行增加
–enable-small optimize for size instead of speed,默认开启
–disable-programs do not build command line programs 去掉这个可以较大程度减少FFmpeg的大小
–disable-avdevice disable libavdevice build 可以根据需求自行减少编译的库以便减少工程大小,FFmpeg很多库文件自行找disable的情况,这里只是抛个砖
如果想要更多更全的说明,请-help获取官方最权威的内容,或者自行查找FFmpeg的configure的编译规则
网友评论