标题centos使用ndk编译fdk-acc
1. 软件版本
ndk
版本:android-ndk-r20b
下载地址:https://developer.android.google.cn/ndk/downloads/older_releases#ndk-20b-downloadsfdk-acc
版本:2.0.2
下载地址:https://sourceforge.net/projects/opencore-amr/files/fdk-aac/
2. 配置编译环境
- 下载
autoconf
# 1. 下载安装包
wget http://mirrors.kernel.org/gnu/autoconf/autoconf-2.69.tar.gz
# 2. 解压安装包
tar -xzvf autoconf-2.69.tar.gz
# 3. 进入安装目录
cd autoconf-2.69
# 4. 配置安装目录
./configure --prefix=/usr/local
# 5. 编译并安装
make && make install
# 6. 检查
autoconf --version
- 下载
automake
# 1. 下载安装包
wget http://mirrors.kernel.org/gnu/automake/automake-1.16.tar.gz
# 2. 解压安装包
tar xzvf automake-1.16.tar.gz
# 3. 进入安装目录
cd automake-1.16
# 4. 配置安装目录
./configure --prefix=/usr/local
# 5. 编译并安装
make && make install
# 6. 检查
automake --version
可能会报错:
解决方法:
# 1. 编辑Makefile
vim Makefile
# 2. 设置行号
:set nu
# 3. 跳转到3694行
:3694
# 4. 3694行的末尾加上–-no-discard-stderr
可能还会报错:
解决方法:
# 1. 编辑/usr/local/bin/automake
vim /usr/local/bin/automake
# 2. 跳转到76行
:set nu
:76
# 3. 将use List::Util ‘none’; 改为 use List::Util;
# 4. 再次使用automake --version
结果:
- 修改
fdk-acc
的文件内容
# 1. 编辑fdk-aac-2.0.2/libSBRdec/src/lpp_tran.cpp
vim fdk-aac-2.0.2/libSBRdec/src/lpp_tran.cpp
# 2. 修改"log/log.h"为"android/log.h"
# 3. 查找android_errorWriteLog
/android_errorWriteLog
# 4. 注释android_errorWriteLog所在行
3. 编译脚本
脚本位置:fdk-acc-2.0.2/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
#64位V8的我们用aarch64-linux-android
#32位的x64使用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
#64位V8设置为arm64-v8a
#32为x86设置为x86
#64位x86_64设置为x86_64
PREFIX=$(pwd)/android/x86_64
#最简版本 指定编译动态链接库不编译静态库
#其它参数配置可以在lame源码根目录下执行./configure -h查看默认和支持的配置
function build_config
{
./configure \
--enable-static \
--enable-shared \
--with-pic \
--host=$HOST \
--prefix=$PREFIX
}
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 \
--with-pic \
--host=$HOST \
--prefix=$PREFIX
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
执行脚本:
./build_android.sh
可能出现错误:
解决方法:
autoreconf
./build_android.sh
4. 编译结果
5. 参考
- CentOS7下安装yara 安装automake
- Unbuntu环境编译 Android平台可用ffmpeg(带三方库fdk-aac和lame)
- automake version mismatch | AM_INIT_AUTOMAKE | 版本不匹配