centos7使用ndk编译x264
1. 软件版本
ndk
版本:android-ndk-r20b
下载地址:https://developer.android.google.cn/ndk/downloads/older_releases#ndk-20b-downloadsx264
版本:
下载地址: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. 参考
- FFmpeg、x264以及fdk-aac 编译整合
- 在linux下 nasm 编译,Ubuntu上安装nasm以及nasm在Ubuntu上的简单使用
- macos NDK 交叉编译X264
- 修改动态库后缀:使用NDK编译x264库