我正在尝试为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)));
^
经过一番挖掘,我发现:
那么这个功能究竟应该从哪里来的呢? (我确实有明确包含的标准库android-ndk-r17c / sources / cxx-stl / llvm-libc ++)我是否缺少某些包含项?任何人都可以帮助我对此有所了解吗?
谢谢。
似乎vreinterpretq_u32_f64
和vreinterpretq_f64_u32
未定义。如果查看Eigen/src/Core/arch/NEON/PacketMath.h
行604,则定义了vreinterpretq_f64_u64
和vreinterpretq_u64_f64
。考虑向量宽度为128位,vreinterpretq_u32_f64
应该从f64x2转换为u32x4,类似于vreinterpretq_f64_u32
只需在Eigen/src/Core/arch/NEON/PacketMath.h
中的第604行之后添加这两个定义
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; }
希望这会有所帮助!