一、下载faac源码
下载页面:https://sourceforge.net/projects/faac/
注意里面包含两个地址,faac是编码库,faad2是解码库,这里我们下载faac,最新版本是faac-1.29.9.2
https://github.com/knik0/faac
https://github.com/knik0/faad2
有篇文章介绍fdk-aac性能优于ffmpeg自带的aac编码器,ffmpeg自带的aac性能优于faac,具体的原因没提,只给出这个结论。
二、交叉编译
faac属于Autoconf类型的项目,编译配置可以参考:将 NDK 与其他构建系统配合使用
最终的整理编译脚本如下:
#!/bin/bash
export NDK=/Users/chengzhen/Library/Android/sdk/ndk/25.1.8937393
# Only choose one of these, depending on your build machine...
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
# Only choose one of these, depending on your device...
export TARGET=aarch64-linux-android
export SYSROOT=$TOOLCHAIN/sysroot
# Set this to your minSdkVersion.
export API=21
# Configure and build.
export AR=$TOOLCHAIN/bin/llvm-ar
export CC="$TOOLCHAIN/bin/clang --target=$TARGET$API"
export AS=$CC
export CXX="$TOOLCHAIN/bin/clang++ --target=$TARGET$API"
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip
export OBJDUMP=$TOOLCHAIN/bin/llvm-objdump
export NM=$TOOLCHAIN/bin/llvm-nm
export AS=$TOOLCHAIN/bin/llvm-as
export BOLT=$TOOLCHAIN/bin/llvm-bolt
export LIB=$TOOLCHAIN/bin/llvm-lib
export LINK=$TOOLCHAIN/bin/llvm-link
export LIPO=$TOOLCHAIN/bin/llvm-lipo
export RC=$TOOLCHAIN/bin/llvm-rc
export MT=$TOOLCHAIN/bin/llvm-modextract
export CFLAGS="-isysroot=$SYSROOT -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fno-limit-debug-info -fPIC"
PREFIX=$(pwd)/$TARGET
./configure \
--prefix=$PREFIX \
--host=$TARGET \
--with-pic
#--enable-shared=no
make clean
make install
编译结束后,可以正常生成静态库和动态库,但是有下面的打印
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
通过Kimi搜索,发现并无影响,可以忽略
这两句话是 Make 工具在构建过程中的输出信息,它们的含义如下:
1. **`install-exec-am`**: 这个目标(target)是用于安装可执行文件的。在 Automake 生成的 Makefile 中,`am` 表示 "automatic makefile" 的意思。`install-exec` 表示安装可执行文件,而 `install-exec-am` 是 Automake 为 `install-exec` 目标自动生成的规则。如果 `make` 命令执行到这一步骤时显示 "Nothing to be done",这意味着在当前的构建环境中,没有可执行文件需要安装,可能是因为:
- 可执行文件已经被正确安装。
- 构建过程中没有生成任何可执行文件。
- 可执行文件的安装规则未被正确定义。
2. **`install-data-am`**: 类似于 `install-exec-am`,这个目标是用于安装数据文件的。`install-data` 表示安装数据文件,而 `install-data-am` 是 Automake 为 `install-data` 目标自动生成的规则。显示 "Nothing to be done" 可能表示:
- 数据文件已经被正确安装。
- 构建过程中没有生成需要安装的数据文件。
- 数据文件的安装规则未被正确定义。
在大多数情况下,这两句话仅仅是说明在当前的构建步骤中没有需要执行的动作,并不一定表示存在问题。如果这是意料之中的(例如,你正在构建一个不包含可执行文件或数据文件的项目),则可以忽略这些信息。
如果这些信息出现在错误或警告的上下文中,或者你确实期望有文件被安装,那么你可能需要检查以下几点:
- 确认 Makefile 或相关构建脚本中的规则是否正确定义。
- 检查是否存在需要安装的可执行文件或数据文件。
- 如果你正在尝试构建的项目有特定的构建依赖或顺序,请确保按照正确的顺序执行构建步骤。
如果你需要进一步的帮助来解决这个问题,你可以提供更多的上下文或 Makefile 的相关部分,以便更准确地诊断问题所在。
网友评论