arm交叉编译不到so_最新版FFmpeg4.1Android库Windows
交叉编译(成功)
⼀、概述
FFmpeg是⼀套可以⽤来记录、转换数字⾳频、视频,并能将其转化为流的开源计算机程序。采⽤LGPL或GPL许可证。它提供了录制、转换以及流化⾳视频的完整解决⽅案。官⽅提供了Windows、Mac OS X等多个平台的⼆进制包,可惜没有Android版本库。
⼆、编译阶段
i. 安装时其实先装的是个下载管理器,到选择安装选项的时候要选上msys-base和mingw32-gcc-ada两项
d) 为了满⾜Android对库⽂件的调⽤格式,需要修改⼀个configure⽂件【⽂件位置:ffmpeg-4.1/configure】,修改格式如下:
将原来的内容
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
修改为如下
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
总共四⾏
e) 最重要的是编写下⾯的脚本
#!/bin/bash
export TMPDIR=F:/SVNMgr/projects/glasses/ffmegp_android_compile/ffmpeg-4.1/ffmpegtemp
#F:/demo/ffmpeg-3.0/ffmpegtemp #设置编译中临时⽂件⽬录,不然会报错 unable to create temporary file
# NDK的路径,根据实际安装位置设置
#NDK=D:/adt-bundle-windows-x86_64-20131030/sdk/ndk-bundle
NDK=E:/Java/android-ndk-r16b
# 编译针对的平台,这⾥选择最低⽀持android-14, arm架构,⽣成的so库是放在libs/armeabi⽂件夹下的,若针对x86架构,要选择arch-x86
PLATFORM=$NDK/platforms/android-14/arch-arm
# ⼯具链的路径,arm-linux-androideabi-4.9与上⾯设置的PLATFORM对应,4.9为⼯具的版本号
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function build_one
{
./configure
--prefix=$PREFIX
--enable-shared
--disable-static
--disable-doc
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-avdevice
-
-disable-doc
--disable-symver
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
--target-os=linux
--arch=arm
--enable-cross-compile
--sysroot=$PLATFORM
--extra-cflags="-I$PLATFORM/usr/include"
$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
}
# arm v7vfp
android最新版
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU " PREFIX=./android/$CPU-vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one
不同的Ffmpeg版本和NDK版本,脚本是有差异的,最新Ffmpeg版本,⽹上的脚本基本编译不过的。
f) ⼤概等待10分钟左右,中间或许出现⼀些⼩错误,修复⼀下就好,要是报⼤⾯积错误,或者是编译配置不正确。
三、⽣成结果
最终⽣成的结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。