微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Eigen Half.h 编译错误:“struct Eigen::half”没有名为“x”的成员

如何解决Eigen Half.h 编译错误:“struct Eigen::half”没有名为“x”的成员

我正在尝试编译一些使用与 TensorFlow 2.2 (https://gitlab.com/libeigen/eigen/-/tree/52a2fbbb008a47c5e3fb8ac1c65c2feecb0c511c) 相同版本的 Eigen 的代码。我使用的缩写命令行是:

tools/cc/gcc74/bin/nvcc-wrapper -nostdinc -isystem external/gcc_7_4/usr/include/c++/7 ... 
  '-D_GLIBCXX_USE_CXX11_ABI=0' -DBOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS -g1 -O2 '-std=c++14' ... 
  -fPIC -DEIGEN_MPL2_ONLY '-DEIGEN_MAX_ALIGN_BYTES=16' '-DEIGEN_MAX_STATIC_ALIGN_BYTES=16' 
  '-D__CUDACC_VER_MAJOR__=10' '-D__CUDACC_VER_MInor__=0' -DEIGEN_HAS_CUDA_FP16 -iquote ...

这会导致一些编译错误

In file included from external/eigen/Eigen/Core:165:0,from external/eigen/Eigen/Dense:1,from ...:
external/eigen/Eigen/src/Core/arch/Default/Half.h: In member function ‘Eigen::half::operator bool() const’:
external/eigen/Eigen/src/Core/arch/Default/Half.h:139:13: error: ‘x’ was not declared in this scope
     return (x & 0x7fff) != 0;
             ^
In file included from external/eigen/Eigen/Core:165:0,from ...:
external/eigen/Eigen/src/Core/arch/Default/Half.h: In function ‘Eigen::half Eigen::half_impl::operator-(const Eigen::half&)’:
external/eigen/Eigen/src/Core/arch/Default/Half.h:342:10: error: ‘struct Eigen::half’ has no member named ‘x’
   result.x = a.x ^ 0x8000;
          ^
external/eigen/Eigen/src/Core/arch/Default/Half.h:342:16: error: ‘const struct Eigen::half’ has no member named ‘x’
   result.x = a.x ^ 0x8000;
                ^
external/eigen/Eigen/src/Core/arch/Default/Half.h: In function ‘Eigen::half_impl::__half_raw Eigen::half_impl::raw_uint16_to_half(short unsigned int)’:
external/eigen/Eigen/src/Core/arch/Default/Half.h:398:5: error: ‘Eigen::half_impl::__half_raw {aka struct __half}’ has no member named ‘x’
   h.x = x;
     ^
external/eigen/Eigen/src/Core/arch/Default/Half.h: In function ‘Eigen::half_impl::__half_raw Eigen::half_impl::float_to_half_rtne(float)’:
external/eigen/Eigen/src/Core/arch/Default/Half.h:426:5: error: ‘Eigen::half_impl::__half_raw {aka struct __half}’ has no member named ‘x’
   o.x = static_cast<unsigned short>(0x0u);
     ^

删除 -DEIGEN_HAS_CUDA_FP16 会导致这些错误消失,但随后需要有效 __half 的其他代码停止工作。我做错了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。