编译Android的x264 lib(附解决No working C compiler found 问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012188065/article/details/88763704

尝试编译android版本的x264 lib

一 取 x264最新版的源码

方法有二:
1 直接 git clone 最新版的代码
git clone https://code.videolan.org/videolan/x264.git
2 上官网下载最新代码压缩包,解压到本地
https://www.videolan.org/developers/x264.html
我用的x264版本如下:

#define X264_REV 2970
#define X264_REV_DIFF 0
#define X264_VERSION " r2970 5493be8"
#define X264_POINTVER "0.157.2970 5493be8"

二 写编译脚本

#!/bin/sh

ANDROID_NDK=~/my_bin/android_ndk/android-ndk-r14b
SDK_VERSION=21

build() {
ARCH=$1

if [ "$ARCH" = "arm64" ]; then
    PLATFORM_PREFIX="aarch64-linux-android-"
    HOST="aarch64"
    PLATFORM_VERSION=4.9
elif [ "$ARCH" = "arm" ]; then
    PLATFORM_PREFIX="arm-linux-androideabi-"
    HOST="arm"
    PLATFORM_VERSION=4.9
else
    echo "unsupport ARCH:$ARCH."
    exit
fi

PREFIX=~/android/${ARCH}
SYSROOT=$ANDROID_NDK/platforms/android-${SDK_VERSION}/arch-${ARCH}
TOOLCHAIN=$ANDROID_NDK/toolchains/${PLATFORM_PREFIX}${PLATFORM_VERSION}/prebuilt/linux-x86_64
CC=$TOOLCHAIN/bin/${PLATFORM_PREFIX}gcc
CXX=$TOOLCHAIN/bin/${PLATFORM_PREFIX}c++
CROSS_PREFIX=$TOOLCHAIN/bin/${PLATFORM_PREFIX}
NM=$TOOLCHAIN/bin/${PLATFORM_PREFIX}nm

./configure \
    --prefix=$PREFIX \
    --cross-prefix=$CROSS_PREFIX \
    --sysroot=$SYSROOT \
    --host=arm-linux \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-asm \
    --enable-pic \
    --disable-cli \
    --host=arm-linux \

make clean
make -j4
make install
}

build arm
build arm64

注意事项:
1、脚本中必须有 ANDROID_NDK=‘你本地ndk的路径’
尽管你在 ~/.bashr中 export了 ANDROID_NDK 指向了你的ndk路径
仍然需要加这句话,因为不加这句话,下面会找不到 ANDROID_NDK变量
导致你编译32位lib时, CC 为
/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
当然在这个路径下找不到编译器了,所以会一直遇到 No working C compiler found 问题
(当初在configure 脚本中的加句log查看下根音就好了,一直没有从根上找,导致这个问题浪费了我两天时间)
2、使用 android-ndk-r14b 的话, SDK_VERSION就选择21吧,因为之前的版本没有arm64编译器。

三 编译出的lib如下

在这里插入图片描述

四 ffmpeg中使能 libx264

如果需要在ffmpeg编译中使能 libx264
需要加如下configure 选项

    --enable-libx264 \
    --enable-gpl \
    --extra-cflags="-marm -I/home/xxx/android/x264/arm/include/" \
    --extra-ldflags="-L/home/xxx/android/x264/arm/lib/" \

因为x264代码遵循gpl协议
所以选项中需要制定 --enable-gpl
–extra-cflags里要制定 x264的头文件路径
–extra-ldflags里要制定x264库的路径
这样,就可以将x264编译到ffmpeg中了。

猜你喜欢

转载自blog.csdn.net/u012188065/article/details/88763704