Linux下编译Android 64位WebRtc的总结-编译64位ffmpeg

Google 8.1号开始强制必须支持64位。之前的版本源码是不支持的。
WebRtc最重要的支持库之一就是ffmpeg了,我这边祖传代码是2.8.4的版本。后面的版本编译脚本基本上通用的。

这里附上我可以运行的脚本:

#!/bin/bash
NDK=../Android/android-ndk-r10e
ADDI_CFLAGS="-fPIE -pie"
ADDI_LDFLAGS="-fPIE -pie"

configure()
{
    CPU=$1
    PREFIX=$(pwd)/android/$CPU
    x264=$(pwd)/x264/android/$CPU
    HOST=""
    CROSS_PREFIX=""
    SYSROOT=""
    ARCH=""
    ANDROID=""
    if [ "$CPU" == "armv7-a" ]
    then
        ANDROID="androideabi"
        ARCH="arm"
        HOST=arm-linux
        SYSROOT=$NDK/platforms/android-21/arch-arm/
        CROSS_PREFIX=$NDK/toolchains/arm-linux-$ANDROID-4.9/prebuilt/linux-x86_64/bin/arm-linux-$ANDROID-
    else
        ARCH="aarch64"
    ANDROID="android"
        HOST=aarch64-linux
        SYSROOT=$NDK/platforms/android-21/arch-arm64/
        CROSS_PREFIX=$NDK/toolchains/aarch64-linux-$ANDROID-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-$ANDROID-
    fi
echo "CROSS_PREFIX = $CROSS_PREFIX"
    ./configure \
    --target-os=android \
    --prefix=$PREFIX \
    --enable-cross-compile \
    --extra-libs="-lgcc" \
    --cc=$NDK/toolchains/$ARCH-linux-android-4.9/prebuilt/linux-x86_64/bin/$ARCH-linux-$ANDROID-gcc \
    --cross-prefix=$CROSS_PREFIX \
    --nm=$NDK/toolchains/$ARCH-linux-android-4.9/prebuilt/linux-x86_64/bin/$ARCH-linux-$ANDROID-nm \
    --extra-cflags=" -O3 " \
    --enable-shared \
    --enable-static \
    --extra-ldflags="-Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -nostdlib -lc -lm -ldl -llog" \
    --disable-everything \
    --disable-ffplay \
    --enable-demuxer=mov \
    --enable-demuxer=h264 \
    --enable-protocol=file \
    --enable-avformat \
    --enable-avcodec \
    --enable-decoder=rawvideo \
    --enable-decoder=mjpeg \
    --enable-decoder=h263 \
    --enable-decoder=mpeg4 \
    --enable-decoder=h264 \
    --enable-parser=h264 \
    --disable-network \
    --enable-zlib \
    --enable-avfilter \
    --disable-avdevice \
    --enable-ffmpeg \
    --arch=$ARCH \
    --sysroot=$SYSROOT \
    --extra-ldflags="-L$x264/lib"
}

build()
{
    make clean
    cpu=$1
    echo "build $cpu"
    
    configure $cpu
    make -j4
    make install
}
//这里是选择编译版本64位或者32位
build arm64
#build armv7-a

注释:第二行是NDK路径,比较重要的参数是target-os,指定的是编译的平台,只有linux和android;decoder是编码格式,选择自己需要的就可以了,prefix是编译库的路径,extra-cflags是声明一些参数,O3是报错等级(其他的是我这边其它的要求不做解释)。

直接复制到根目录下,运行脚本就可以了,最后的编译完成会在目录 Android下生成arm64或者armv7-a的文件夹,在文件夹中的lib中会有对应的动态库。

Linux下编译Android 64位WebRtc的总结-编译64位ffmpeg_第1张图片
image.png

附:linux查看动态库是不是64位可以执行

objdump -a 文件.a/.so

出现下面的elf64就是64位的库

image.png

你可能感兴趣的:(Linux下编译Android 64位WebRtc的总结-编译64位ffmpeg)