如何修复错误:"vreinterpretq_u32_f64"未在此范围内声明 - 在Android上使用Eigen构建



我正在尝试为Android构建Tensorflow Lite,它将Eigen作为依赖项。 在构建过程中,我收到此错误:

.../eigen/Eigen/src/Core/arch/NEON/Complex.h:383:83: error: 'vreinterpretq_u32_f64' was not declared in this scope
Packet2d eq_swapped = vreinterpretq_f64_u32(vrev64q_u32(vreinterpretq_u32_f64(eq)));
             ^

经过一番挖掘,我发现:

  1. vreinterpretq_u32_f64确实没有在本征中定义,并且
  2. 特征只有标准库作为依赖项

那么这个函数究竟应该从哪里来呢?(我确实明确包含标准库 android-ndk-r17c/sources/cxx-stl/llvm-libc++(我缺少一些包含吗? 谁能帮我介绍一下?

谢谢。

似乎没有定义vreinterpretq_u32_f64vreinterpretq_f64_u32
如果您查看Eigen/src/Core/arch/NEON/PacketMath.h第 604 行,就会定义vreinterpretq_f64_u64vreinterpretq_u64_f64
将矢量宽度视为 128 位,vreinterpretq_u32_f64应从 f64x2 转换为 u32x4,同样适用于vreinterpretq_f64_u32

只需在 604 行之后添加这两个定义Eigen/src/Core/arch/NEON/PacketMath.h

template <typename T> float64x2_t vreinterpretq_f64_u32(T a) { return (float64x2) a; }
template <typename T> uint32x4_t vreinterpretq_u32_f64(T a) { return (uint32x4) a; }

希望这有帮助!

最新更新