自己编译主要参考《一键编译32_64位FFmpeg.4.2.2》-%E4%B8%80%E9%94%AE%E7%BC%96%E8%AF%91-32-64-%E4%BD%8D-FFmpeg-4-2-2.md),最开始的时候自己一直在 Mac M1 上编译,各种流程也是一比一复刻,但是仍然会有各种问题出现,最常见的就是:
aarch64-linux-android21-clang is unable to create an executable file. C compiler test failed.
我反复检查了自己的 NDK 的配置,确保是正确的,文章也有提及处理方式,但是尝试下来都无效,在网上搜了一大篇解决方式,也都无效。不过我看他们很多都是用 Linux 系统进行的编译,遂改为使用 Linux 编译,再重新尝试,似乎没有那些个奇奇怪怪的错误了,也打出了最终的包,最后的 so 大小也符合要求。
--list-decoders show all available decoders --list-encoders show all available encoders --list-hwaccels show all available hardware accelerators --list-demuxers show all available demuxers --list-muxers show all available muxers --list-parsers show all available parsers --list-protocols show all available protocols --list-bsfs show all available bitstream filters --list-indevs show all available input devices --list-outdevs show all available output devices --list-filters show all available filters
其他的配置就是一些实际性的开关配置,列一些常用的配置:
配置产物为静态库(.a)或者动态库(.so)
--enable-static do not build static libraries [no] --enable-shared build shared libraries [no]
//1\. 修改 configure 文件 vim configure //2\. 把 默认的 clang 修改为 gcc if test "$target_os" = android; then # cc_default="clang" cc_default="gcc" fi
原因2,检查路径是否正确,主要是 NDK 的位置,以及不同 NDK 相关库可能存在一定的丢失。
这个问题我在 macOS 上未解决,换用 CentOS 没有出现过这个编译问题。
2、 编译包大小一直不变
最开始我正常编译的时候发现怎么改配置,最后的包大小都没有发生变化,但是命令行里面各种流程又是在走,最终也有产物。这里一定要关注在执行了编译脚本之后,查看最开始的日志,看看具体是一些什么错,这里日志会刷得很快,如果包大小一直没有发生变化的话,可以执行完之后快速停止,看看是什么错。一般就是C compiler test failed. 或者找不到你的配置,改对即可。正常编译,会在开始后列出你的编译配置。