我在android-ndk中使用了霓虹灯,但是我面临着一个主题标题的问题。
我在这里下载hello-neon演示:https://github.com/googlesamples/android-ndk这是一个演示如何在android ndk中使用霓虹灯的演示。然后我像这样添加这个代码:
#include <arm_neon.h>
uint16_t neonTest(uint8x16_t input){
uint8x16_t minput = vandq_u8(input,input);
uint8x16_t tmp = vpaddq_u8(minput,minput);
tmp = vpaddq_u8(tmp,tmp);
tmp = vpaddq_u8(tmp,tmp);
return vgetq_lane_u16(vreinterpretq_u16_u8(tmp),0);
}
最奇怪的是: vandq_u8和vpaddq_u8都包含在arm_neon.h中,但异常跟踪是:
error: use of undeclared identifier 'vpaddq_u8'
这意味着包含'vandq_u8‘而不包含'vpaddq_u8’。但它们在同一个头文件中。
我该如何解决这个问题?
发布于 2019-04-20 02:45:57
我认为这里的问题是,您不仅为ARM编译了相同的代码,也为x86编译了相同的代码。
NDK有一个同样适用于x86的arm_neon.h版本,它有一个不完整的ARM内部函数集,它使用不同的SSE内部函数来模拟它们。这使得即使在x86上也可以使用相同的SIMD码,但不会获得最佳性能。(这是否是可取的,或者它是否确实提供了比普通串行代码更好的性能,这是有很大争议的。)此标头包含vandq_u8
,但缺少vpaddq_u8
。
因此,请确保没有编译包含用于x86的霓虹灯内部函数的代码(在build.gradle
中从ndk.abiFilters
中删除x86和x86_64 )。或者,使用ifdefs仅在面向ARM/AArch64时使用此代码,并将其替换为其他体系结构的回退。
https://stackoverflow.com/questions/55756626
复制相似问题