编译并运行Android下的x264

本文介绍如何在Linux和macOS环境下为Android编译x264库,并提供了解决Android运行时出现的log2f符号未找到的问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux下编译x264如下:
>./configure --enable-pic --enable-strip --enable-static --disable-opencl --prefix=./build
>make
>make install

因为项目关系,自己实践了两种编译环境。


一、linux下编译android x264的配置:

./configure --enable-pic --enable-strip --enable-static --cross-prefix=/opt/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi- --sysroot=/opt/android-ndk-r10/platforms/android-14/arch-arm --host=arm-linux --prefix=./build-android --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__'

配置关键点1:指定使用的交叉编译的编译器、链接的头文件及类库所在
配置关键点2:-march=armv7-a -mtune=cortex-a9 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ ,此处,针对armv7-a的CPU打开了NEON的优化运行指令。
配置关键点3:去掉--disable-asm选项。该选项的意思就是禁止neon的指令。
配置关键点4:添加--enable-static选项,生成静态链接的库供程序开发使用。
 

二、mac OS下编译android x264的配置:
.sh脚本如下:
export NDK_ROOT=/Users/kevin/Desktop/android-ndk-r9c
export ARM_PREFIX=$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86/bin/arm-linux-androideabi-
export ARM_ROOT=$NDK_ROOT/platforms/android-18/arch-arm

./configure --enable-pic --enable-strip --enable-static --cross-prefix=$ARM_PREFIX --sysroot=ARM_ROOT --host=arm-linux --prefix=./build --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__' --prefix=./build

完整命令为:
./configure --enable-pic --enable-strip --enable-shared --cross-prefix=/Users/kevin/Desktop/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86/bin/arm-linux-androideabi- --sysroot=/Users/kevin/Desktop/android-ndk-r9c/platforms/android-18/arch-arm --host=arm-linux --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__' --prefix=./build-android


三、Android下运行x264命令行错误解决:

1、 提示:cannot locate symbol 'log2f'
经查找,就如下几个c文件用到该语句:
     encoder/encoder.c 、 encoder/ratecontrol.c 、encoder/analyse.c 、encoder/set.c

解决:在各自文件开头处添加如下语句后再编译即可:

//#include <math.h>

#undef log2f(x)
#undef log2f
#define log2f(x) (logf(x)*1.4426950408889634f)

log2f是参考osdep.h中:
#if !HAVE_LOG2F
#define log2f(x) (logf(x)/0.693147180559945f)
#define log2(x) (log(x)/0.693147180559945)
#endif



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值