linux编译fdk aac,Ubuntu下利用NDK编译ffmpeg+x264+fdk-aac

由于FFmpeg、x264、Fdk-aac的版本问题,所以编译的时候有很多坑

编译顺序:

首先利用脚本分别编译x264和fdk-aac库,生成头文件(.h)与静态库文件(.a/.la)。

将FFmpeg的外部链接设置为两个库的include与llib,也可将两个库的头文件和库文件分别放在一起

首先

FFmpeg编译脚本

这是在一个课程的脚本基础上改的

#!/bin/bash

echo "进入编译ffmpeg脚本"

NDK=/home/wzh/NDK/android-ndk-r14b

#5.0

PLATFORM=$NDK/platforms/android-21/arch-arm

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

CPU=armv7-a

#输出路径

PREFIX=/home/wzh/NDK/ffmpeg-3.4.2/android

#x264、fdk-aac的头文件以及.a(静态库)文件路径

EXTRA_CFLAGS="-I/home/wzh/NDK/android/include/"

EXTRA_LDFLAGS="-L/home/wzh/NDK/android/lib"

function buildFF

{

echo "开始编译ffmpeg"

./configure \

--prefix=$PREFIX \

--target-os=android \

#交叉编译

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

--arch=arm \

--cpu=$CPU \

--sysroot=$PLATFORM \

#编译器

--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \

--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \

--extra-libs=-ldl \

--enable-shared \

#使能fdk-aac库

--enable-libfdk-aac \

--enable-encoder=libfdk_aac \

--enable-decoder=libfdk_aac \

#使能X264库

--enable-libx264 \

--enable-encoder=libx264 \

--enable-runtime-cpudetect \

--enable-nonfree \

--enable-neon \

--enable-gpl \

--enable-small \

--enable-cross-compile \

--enable-jni \

--enable-mediacodec \

--disable-debug \

--disable-static \

--disable-doc \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--disable-ffserver \

--disable-postproc \

--disable-avdevice \

--disable-symver \

--disable-stripping \

--extra-cflags=$EXTRA_CFLAGS \

--extra-ldflags=$EXTRA_LDFLAGS

make -j8

make install

echo "编译结束!"

}

#CFLAG="-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp "

buildFF

x264(20140916-2245-stable)编译脚本、网上找的微改

#!/bin/bash

NDK=/home/wzh/NDK/android-ndk-r14b

#5.0

PLATFORM=$NDK/platforms/android-21/arch-arm

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

CPU=armv7-a

#输出路径

PREFIX=/home/wzh/NDK/android

function build_one

{

./configure \

--prefix=$PREFIX \

--enable-static \

--enable-shared \

--enable-pic \

--disable-cli \

--host=arm-linux \

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

--sysroot=$PLATFORM

}

build_one

Fdk-aac(0.1.4)编译脚本、网找微改

NDK_HOME=/home/wzh/NDK/android-ndk-r14b

SYSROOT=$NDK_HOME/platforms/android-21/arch-arm

ANDROID_BIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/

CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-

ARM_INC=$SYSROOT/usr/include

ARM_LIB=$SYSROOT/usr/lib

#用前确认路径

LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -L$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib -L$ARM_LIB -lc -lgcc -lm -ldl "

FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared"

export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"

export LDFLAGS="$LDFLAGS"

export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"

./configure $FLAGS \

--prefix='/home/wzh/NDK/android'

问题:

直接编译x264库的话会出现两个动态库 libx264.so 与 libx264.so.148

android会报错:找不到x264.so.148

原因是android识别不了文件格式,所以要先修改configure文件,由于在linux下编译,所以将最下面的SONAME值改成如图,删掉原有的.$API

fc4b3a5e904e1018d6a66addaceec42d.png

ffmpeg编译时问题:找不到libx264或找不到fdk-aac

一般是由于路径设置的问题,如果路径设置正确,选项设置正确,那就可能是NDK/FFmpeg/Fdk-aac/x264之间版本不兼容造成的错误,更换版本可能发生奇迹!

最后生成的文件将输出到设置的输出文件路径,将include和lib的内容(.h文件与.so文件)拷贝到android工程的include与lib目录,配置好Cmake的相关库路径就可以使用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值