目录
在使用gcc-linaro-7.5.0-aarch64-linux-gnu、gcc-linaro-6.3.1-aarch64-linux-gnu交叉编译链对MNN1.2.0进行交叉编译的过程中,make的时候遇到了一个报错。
error: cannot convert 'int8x16_t {aka __vector(16) signed char}' to 'int32x4_t {aka__vector(4) int}' for argument '1' to 'int32x4_t vtrnlq_s32(int32x4_t, int32x4_t)'
发生错误的源代码在./source/backend/cpu/compute/WinogradInt8Helper.cpp
的第39~44行。
大概原因是在定义m0m3的时候,传入vtrn1q_s32()函数的vec0.valuevec3.value是int8x16_t型的,而vtrn1q_s32()函数需要传入int32x4_t型的参数,所以发生了类型冲突。
在这里有人反映了相同与类似的错误,有人回答说在mater版本的MNN中已经修复,但我使用mater版本的MNN进行交叉编译仍然会出现相同的错误。
后来在这里发现了一模一样的错误与另一种解决方案,即使用reinterpret_cast()函数进行强制转换。
具体的修改代码在我在图中用红框标出来的这个链接里。
修改后的代码如下。
随后重新进行交叉编译,编译成功。
标签:错误,1.2,交叉,int32x4,编译,MNN,s32,KAWAKO From: https://www.cnblogs.com/KAWAKO/p/17075585.html