目录

    在使用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()函数进行强制转换。

    具体的修改代码在我在图中用红框标出来的这个链接里。

    修改后的代码如下。

    随后重新进行交叉编译,编译成功。

    posted on 2023-01-30 13:29  KAWAKO  阅读(203)  评论(0)    收藏  举报