ffmpeg android 交叉编译

编译环境

ffmpeg :4.3
CentoOS Linux release 7.6.1810
android-ndk-r21d

开始

1.解压完成之后,首先切到 root 权限
2.执行ffmpeg 文件下的 configure


image.png

image.png

出现上面的问题

参考

ubuntu 编译FFmgeg执行./configure 时会报此错误。

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

需要安装yasm的汇编编译器

sudo apt-get install yasm
分析:yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。

如果不需要yasm也可以

./configure --disable-x86asm
————————————————
版权声明:本文为CSDN博主「IT民工老巢」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/taosera/article/details/79566905

完成之后执行脚本

#!/bin/bash
export TMPDIR=/Users/zhouwen/Desktop/ffmpeg/ffmpeg-4.1.3/ffmpegoutput #需要指定编译输出的临时文件夹,不然会报错 unable to create temporary file in

# NDK的路径,根据自己的安装位置进行设置
NDK=/Users/zhouwen/Desktop/ffmpeg/android-ndk-r10e

# 编译针对的平台,可以根据自己的需求进行设置
# 这里选择最低支持android-14, arm架构,生成的so库是放在
# libs/armeabi文件夹下的,若针对x86架构,要选择arch-x86
PLATFORM=$NDK/platforms/android-14/arch-arm

# 工具链的路径,根据编译的平台不同而不同
# arm-linux-androideabi-4.9与上面设置的PLATFORM对应,4.9为工具的版本号,
# 根据自己安装的NDK版本来确定,一般使用最新的版本
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

function build_one
{
./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-avformat \
    --enable-ffmpeg \
    --enable-ffplay \
    --enable-ffprobe \
    --disable-x86asm \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=android \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$PLATFORM \
    --extra-cflags="-I$PLATFORM/usr/include" \
#    --extra-ldflags="-L$PLATFORM/usr/lib -nostdlib" \ #①这一句我注释掉了,不然会报 ld: -single_module: unknown option

$ADDITIONAL_CONFIGURE_FLAG
sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h

make clean
make -j4
make install
echo "编译完成"
}

# arm v7vfp
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
PREFIX=$(pwd)/android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
echo "开始编译ffmpeg"
echo "OPTIMIZE_CFLAGS ${OPTIMIZE_CFLAGS}"
echo "PREFIX ${PREFIX}"
echo "NDK ${NDK}"
echo "TOOLCHAIN ${TOOLCHAIN}"
build_one

这里可以参考

FFmpeg编译

作者:Kallan
链接:https://www.jianshu.com/p/28c4d6be5c90
来源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(ffmpeg android 交叉编译)