错误信息记录:
CC libavfilter/vf_mestimate.o
/tmp/ccqhZ2YH.s: Assembler messages:
/tmp/ccqhZ2YH.s:781: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:782: Error: unknown mnemonic `movgt' -- `movgt x12,x1'
/tmp/ccqhZ2YH.s:783: Error: unknown mnemonic `movgt' -- `movgt x1,x3'
/tmp/ccqhZ2YH.s:785: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:786: Error: unknown mnemonic `movle' -- `movle x1,x11'
/tmp/ccqhZ2YH.s:788: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:789: Error: unknown mnemonic `movgt' -- `movgt x12,x1'
/tmp/ccqhZ2YH.s:798: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:799: Error: unknown mnemonic `movgt' -- `movgt x3,x0'
/tmp/ccqhZ2YH.s:800: Error: unknown mnemonic `movgt' -- `movgt x0,x2'
/tmp/ccqhZ2YH.s:802: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:803: Error: unknown mnemonic `movle' -- `movle x0,x1'
/tmp/ccqhZ2YH.s:805: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:806: Error: unknown mnemonic `movgt' -- `movgt x3,x0'
/tmp/ccqhZ2YH.s:895: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:896: Error: unknown mnemonic `movgt' -- `movgt x13,x1'
/tmp/ccqhZ2YH.s:897: Error: unknown mnemonic `movgt' -- `movgt x1,x11'
/tmp/ccqhZ2YH.s:899: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:900: Error: unknown mnemonic `movle' -- `movle x1,x12'
/tmp/ccqhZ2YH.s:902: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:903: Error: unknown mnemonic `movgt' -- `movgt x13,x1'
/tmp/ccqhZ2YH.s:909: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:910: Error: unknown mnemonic `movgt' -- `movgt x1,x0'
/tmp/ccqhZ2YH.s:911: Error: unknown mnemonic `movgt' -- `movgt x0,x2'
/tmp/ccqhZ2YH.s:913: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:914: Error: unknown mnemonic `movle' -- `movle x0,x3'
/tmp/ccqhZ2YH.s:916: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:917: Error: unknown mnemonic `movgt' -- `movgt x1,x0'
/tmp/ccqhZ2YH.s:1199: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:1200: Error: unknown mnemonic `movgt' -- `movgt x15,x3'
/tmp/ccqhZ2YH.s:1201: Error: unknown mnemonic `movgt' -- `movgt x3,x12'
/tmp/ccqhZ2YH.s:1203: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:1204: Error: unknown mnemonic `movle' -- `movle x3,x14'
/tmp/ccqhZ2YH.s:1206: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:1207: Error: unknown mnemonic `movgt' -- `movgt x15,x3'
/tmp/ccqhZ2YH.s:1216: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:1217: Error: unknown mnemonic `movgt' -- `movgt x12,x1'
/tmp/ccqhZ2YH.s:1218: Error: unknown mnemonic `movgt' -- `movgt x1,x4'
/tmp/ccqhZ2YH.s:1220: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:1221: Error: unknown mnemonic `movle' -- `movle x1,x3'
/tmp/ccqhZ2YH.s:1223: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:1224: Error: unknown mnemonic `movgt' -- `movgt x12,x1'
/tmp/ccqhZ2YH.s:1240: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:1241: Error: unknown mnemonic `movgt' -- `movgt x16,x3'
/tmp/ccqhZ2YH.s:1242: Error: unknown mnemonic `movgt' -- `movgt x3,x14'
/tmp/ccqhZ2YH.s:1244: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:1245: Error: unknown mnemonic `movle' -- `movle x3,x15'
/tmp/ccqhZ2YH.s:1247: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:1248: Error: unknown mnemonic `movgt' -- `movgt x16,x3'
/tmp/ccqhZ2YH.s:1254: Error: unknown mnemonic `itt' -- `itt gt'
/tmp/ccqhZ2YH.s:1255: Error: unknown mnemonic `movgt' -- `movgt x3,x1'
/tmp/ccqhZ2YH.s:1256: Error: unknown mnemonic `movgt' -- `movgt x1,x4'
/tmp/ccqhZ2YH.s:1258: Error: unknown mnemonic `it' -- `it le'
/tmp/ccqhZ2YH.s:1259: Error: unknown mnemonic `movle' -- `movle x1,x12'
/tmp/ccqhZ2YH.s:1261: Error: unknown mnemonic `it' -- `it gt'
/tmp/ccqhZ2YH.s:1262: Error: unknown mnemonic `movgt' -- `movgt x3,x1'
ffbuild/common.mak:78: recipe for target 'libavfilter/vf_mestimate.o' failed
make: *** [libavfilter/vf_mestimate.o] Error 1
上面错误明显时指令集不匹配导致。
问题是做620平台时,编译没有问题。为什么做630平台就出错了呢?这两者间的区别就是在编译器上。
在620上用 ./configure --prefix=/home/${HOME}/arm_soft_dest/ffmpeg --disable-static --enable-shared --disable-debug --disable-ffplay --disable-ffprobe --enable-parser=h264 --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=arm-linux-gnueabihf-
换成630的编译器 --cross-prefix=aarch64-linux-gnu- 后出现错误。
在网上查了一下资料,有下面一段文字描述:
aarch64
是 ARMv8-A
架构中引入的64
位指令集,AArch64
向后兼容基于32
位指令集的 ARMv7-A
和之前别的一些 32
位 ARM 架构(也就是AArch32
)。
因此,64
位ISA
的 GNU 三元组是 aarch64
。
历史中,Linux 内核社区选择arm64
作为内核的端口调用,而不是aarch64
,这就导致遗留了一些 arm64
的用法。同样的,Apple后端团队也称aarch64
为arm64
。
目前,LLVM 社区后端称为aarch64
(因为它是64位ISA的规范名称),后来两者合并,后端现在统一称为aarch64
。
所以aarch64
和arm64
指的是同一个东西。
所以,将configure 修改一下,编译就通过了。
./configure --prefix=/home/${HOME}/arm64_soft_dest/ffmpeg --disable-static --enable-shared --disable-debug --disable-ffplay --disable-ffprobe --enable-parser=h264 --enable-cross-compile --arch=arm64 --target-os=linux --cross-prefix=aarch64-linux-gnu-