用最新的ndk(21.1)编译新的ffmpeg(4.1) 网上找了个编译脚本然后一运行就报上面的错误,找了n多篇也没搜罗到解决办法,有一种大部分人都在问这个问题但是就是没有解决方案的不明觉厉,发帖的发帖,但是没人回答,回答问题的也多数是水文,风马牛不相及,视乎还有一部分根本没有发现这个问题,上来都是贴编译脚本,报这种错?好像从来不会有这这回事?不过我现在终于解决了,blog一下:
我的环境出现这个问题是,编译配置脚本上多了一个行配置:
--cpu=$CPU
CPU=arm64-v8a
因为这个--cpu的参数导致问题。正确的写法是
#32bit
ARCH=arm
CPU=armv7-a
#或者64bit
ARCH=arm64
CPU=armv8-a
可以直接在 configure中搜索找到答案:
下面啰嗦一下对这种问题的看法,知其然知其所以然
网上最多的关于ndk编译ffmpeg的方法,基本是一个模子,写一个shell脚本,里面一个shell脚本函数调用源码里面的configure进行配置,配置参数里面设置交叉编译器,最后编译。
上诉问题就是configure配置报错,configure就是ffmpeg源码里面的配置脚本,会进行各种参数环境检查,然后更具配置的参数生成Makfile文件。现在就是环境检查的时候出错了,指定的编译器 无法工作。。。
1.0 ls 一下上面报错出来的 cc工具路径,是不是clang路径设置错误,真的没这个文件, 或者没有可执行权限。
2.0 没法子,硬生生地去configure脚本里面找这个报错的源头,理解它检查环境的具体工作流程----太难了, 去看这个configure脚本。。。。。。。 其实它报错的时候已经提示:
If you think configure made a mistake, make sure you are using the latest version from Git. If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "ffbuild/config.log" produced by configure as this will help solve the problem
the log file ffbuild/config.log produced by configure
配置会生成日志文件,官方都是通过这个来协助解决问题的,我们也可以看看:
这里已经详细指出问题,clang compiler does not support '-mcpu=arm64-v8a'
可以看到上面 还有其他的过程,比如 创建临时工作的目录 mktemp ,有些博文里面关于这个问题就有一种方式就是 之地TEMP 参数,可能是环境的问题导致这里mktemp无法创建temp目录,还有的博文是解决 test_ld ld连接工具错误的问题。