您的位置:首页 > 运维架构 > Linux

ffmpefg arm64库文件源码编译

2017-12-21 14:44 148 查看
因android studio工程需要,需要编译ffmpeg64位的so库,参考了很多文档总是出错,最后终于成功,使用的环境是centos7,需要安装gcc,ndk的版本是android-ndk-r14b-linux-x86_64,ffmpeg的版本是ffmpeg-3.2.9,之前编译过ffmpeg3.4.1,64位一直没成功且总出错,最后终于成功。请参考以下说明。

1、文件下载按上面的说明下载需要的源码文件

2、配置系统环境变量,在/etc/profile的末尾添加

NDKROOT=/home/suirui/android-ndk-r14b

export PATH=$NDKROOT:$PATH

添加完成后,执行source /etc/profile立即生效

3、在解压后的ffmpeg的源码路径下,找到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)'

4、编写sh脚本,若使用64位arm,请直接copy下面文本,将编写好的sh脚本放在ffmpeg的根目录下,添加可执行权限
需要根据自己机器的实际情况,修改NDK、SYSROOT和TOOLCHAIN的路径,在指定的PREFIX下,创建sh中使用的路径,该例子中是在ffmpeg的根目录下创建android/arm64-v8a该文件夹

#!/bin/bash

NDK=/home/android-ndk-r14b

SYSROOT=$NDK/platforms/android-22/arch-arm64

TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64

function build_one

{

./configure \

--prefix=$PREFIX \

--enable-shared \

--disable-static \

--disable-doc \

--disable-ffserver \

--enable-cross-compile \

--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \

--target-os=linux \

--arch=aarch64 \

--sysroot=$SYSROOT

#--extra-cflags="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing" \

#--extra-ldflags="$ADDI_LDFLAGS"

}

CPU=arm64-v8a

PREFIX=$(pwd)/android/$CPU

ADDI_LDFLAGS="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog"

build_one

make -j8

make install
5、如果之前执行make失败过,请先执行make uninstall和make clean
6、在ffmpeg目录下执行sh脚本,生成的so文件在创建的PREFIX(android/arm64-v8a)路径下
7、如果需要编译32位的话,需要改动几个地方
SYSROOT=$NDK/platforms/android-22/arch-arm64,改成SYSROOT=$NDK/platforms/android-22/arch-arm
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64,改成arm-linux-androideabi-4.9/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android-,改成--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi

--arch=aarch64 ,改成--arch=arm
CPU=arm64-v8a,改成CPU=arm
在ffmpeg的目录下创建android/arm文件夹,用于prefix输出文件
其他的不用修改,直接执行,生成的库文件在android/arm下
注意:此文档只编译成功了3.2.9版本,其他的版本没有试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ffmpeg arm64 linux ndk x86_64
相关文章推荐