centos7使用ndk编译x264

本文详细介绍了在CentOS7系统中如何使用AndroidNDK-r20b编译x264编码库,包括设置NDK路径,选择不同的目标架构(armv7a,aarch64,i686,x86_64),配置编译选项,以及处理可能遇到的问题,如x86和x86_64编译时的注意事项,修改动态库后缀名等。

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

centos7使用ndk编译x264

1. 软件版本

  1. ndk版本:android-ndk-r20b
    下载地址:https://developer.android.google.cn/ndk/downloads/older_releases#ndk-20b-downloads
  2. x264版本:
    下载地址:https://www.videolan.org/developers/x264.html

2. 编译脚本

脚本位置:x264-master/build_android.sh

# NDK所在目录
NDK_ROOT=/root/workspace/android-ndk-r20b
TOOLCHAIN="${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64" 

#重新赋值我们的CC和CXX,用我们Android自己的C编译器,而且会有32和64之分
#32位V7的我们用armv7a-linux-androideabi
HOST=armv7a-linux-androideabi
#64位V8的我们用aarch64-linux-android
#HOST=aarch64-linux-android
#32位的x64使用i686-linux-android
# HOST=i686-linux-android
#64位的x86_64使用x86_64-linux-android
# HOST=x86_64-linux-android
#至于这个21你可以自己选版本号,看你的目录下有哪些版本
V=21

export CC=$TOOLCHAIN/bin/$HOST$V-clang
export CXX=$TOOLCHAIN/bin/$HOST$V-clang++
echo $CC
#PREFIX定义编译输出目录
#32位V7设置为armeabi-v7a
PREFIX=$(pwd)/android/armeabi-v7a
#64位V8设置为arm64-v8a
# PREFIX=$(pwd)/android/arm64-v8a
#32为x86设置为x86
# PREFIX=$(pwd)/android/x86
#64位x86_64设置为x86_64
# PREFIX=$(pwd)/android/x86_64

#最简版本 指定编译动态链接库不编译静态库
#其它参数配置可以在lame源码根目录下执行./configure -h查看默认和支持的配置
function build_config
{
	./configure \
	--enable-static \
	--enable-shared \
	--host=$HOST \
	--prefix=$PREFIX \
	--disable-cli \
	--enable-pic
}

build_config
make clean
make -j8 #8是线程数 数字越大编译速度越快,前提是你电脑支持
make install

一次编译多个平台的脚本:

# NDK所在目录
NDK_ROOT=/root/workspace/android-ndk-r20b
TOOLCHAIN="${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64" 

#至于这个21你可以自己选版本号,看你的目录下有哪些版本
V=21

#最简版本 指定编译动态链接库不编译静态库
#其它参数配置可以在lame源码根目录下执行./configure -h查看默认和支持的配置
function build_config
{
	./configure \
	--enable-static \
	--enable-shared \
	--host=$HOST \
	--prefix=$PREFIX \
	--disable-cli \
	--enable-pic

	make clean
	make -j8 #8是线程数 数字越大编译速度越快,前提是你电脑支持
	make install
}

#32位V7的我们用armv7a-linux-androideabi
HOST=armv7a-linux-androideabi
export CC=$TOOLCHAIN/bin/$HOST$V-clang
export CXX=$TOOLCHAIN/bin/$HOST$V-clang++
PREFIX=$(pwd)/android/armeabi-v7a
build_config

#64位V8的我们用aarch64-linux-android
# HOST=aarch64-linux-android
# export CC=$TOOLCHAIN/bin/$HOST$V-clang
# export CXX=$TOOLCHAIN/bin/$HOST$V-clang++
# PREFIX=$(pwd)/android/arm64-v8a
# build_config

#32位的x86使用i686-linux-android
# HOST=i686-linux-android
# export CC=$TOOLCHAIN/bin/$HOST$V-clang
# export CXX=$TOOLCHAIN/bin/$HOST$V-clang++
# PREFIX=$(pwd)/android/x86
# build_config

#64位的x86_64使用x86_64-linux-android
# HOST=x86_64-linux-android
# export CC=$TOOLCHAIN/bin/$HOST$V-clang
# export CXX=$TOOLCHAIN/bin/$HOST$V-clang++
# PREFIX=$(pwd)/android/x86_64
# build_config

执行脚本:

# 1. 修改脚本权限
chmod a+x build_android.sh
# 2. 执行脚本
./build_android.sh

编译x86可能遇到的问题:
问题
解决方法:

配置内添加--disable-asm

如图:
添加

编译x86_64可能遇到问题:
问题
解决方法:

# 1. 下载nasm
wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
# 2. 解压
tar -zxvf nasm-2.13.03.tar.gz
# 3. 进入目录后编译、安装
cd nasm-2.13.03/
./configure
make && make install
# 4. 检查
nasm -version

结果:
结果

3. 编译结果

结果

4. 修改动态库后缀名称

如果需要修改动态库名称可以参考这一小节:

# 编辑configure
vim configure
# 显示行号
:set nu
# 编辑1594行
:1594
# 注释1594行,并在下方添加
echo "SONAME=libx264.so"

修改后缀
重新编译后的动态库:
动态库

5. 参考

  1. FFmpeg、x264以及fdk-aac 编译整合
  2. 在linux下 nasm 编译,Ubuntu上安装nasm以及nasm在Ubuntu上的简单使用
  3. macos NDK 交叉编译X264
  4. 修改动态库后缀:使用NDK编译x264库

6. 项目地址

https://toscode.gitee.com/icebear221/AndroidFFmpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值