如何解决错误:在此范围内未声明'vreinterpretq_u32_f64'-在Android上使用Eigen构建

问题描述 投票:1回答:1

我正在尝试为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确实未在Eigen中定义,并且这样
  2. Eigen仅将标准库作为依赖项

那么这个功能究竟应该从哪里来的呢? (我确实有明确包含的标准库android-ndk-r17c / sources / cxx-stl / llvm-libc ++)我是否缺少某些包含项?任何人都可以帮助我对此有所了解吗?

谢谢。

android c++ c tensorflow eigen
1个回答
0
投票

似乎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

只需在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; }

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.