引言:
想尝试在WSL将FFmpeg的源码编译成动态库,中途遇到了些问题,最后解决了,浅浅记录一下。Linux版本18.04,FFmpeg版本6.1,AndroidNDK版本26.3。
问题:
网上的人基本上都是写好脚本文件来执行整个生成动态库的任务,我也是。在通过./configure命令生成Makefile文件的时候,在最前面的位置看到了如下提示。(“****”是我安装android-ndk目录的前缀)
./configure: 5978: ./configure: ****/android-ndk-r26/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-nm: not found
这个既不是警告也不是错误,我就没注意,最后makefile也成功生成了。但是执行make -j16命令的之后,得到了如下错误
/bin/sh: 1: ****/android-ndk-r26/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip: not found
Makefile:125: recipe for target 'ffmpeg' failed
make: *** [ffmpeg] Error 127
分析:
搞了很久,其实就是找不到个别交叉编译工具了,因为我只设置了C和C++的编译工具。之所以只设置了这两个,是因为我参考的文章用的都是老版本的android-ndk,而我下载的版本较新,从他们提供的ndk交叉编译工具的路径我只找到了C和C++的,并没有找到诸如am、ar、ld等工具,我猜是新版本的ndk更改了工具的位置,或者是换了名字。
解决办法:
仔细看了一下,其实原来的目录“/android-ndk-r26/toolchains/llvm/prebuilt/linux-x86_64/bin/”里面是有上诉那些工具,只是改了名字。原来的前缀是类似“aarch64-linux-android-”这样的,在我这个版本里变成了“llvm-”。
所以将脚本的cross-prefix参数值换成“llvm-”就行了。
--cross-prefix=$TOOLCHAIN/bin/llvm-