qq_34361614
AI文艺猫
采纳率100%
2019-03-20 19:01 阅读 433

C++编译时,dynet的nodes.cc出错:THIS_TYPE_IS_NOT_SUPPORTED,怎么解决?

20

在编译c++程序时,dynet依赖库里的node.cc出现如下错误:
-
THIS_TYPE_IS_NOT_SUPPORTED。
-
具体报错信息如下:
-

4>d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\src/SpecialFunctions/SpecialFunctionsImpl.h(342): error C2338: THIS_TYPE_IS_NOT_SUPPORTED (D:\ltp\ltp_graphsdp\thirdparty\dynet\dynet\nodes.cc)
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\src/SpecialFunctions/SpecialFunctionsImpl.h(341): 编译类 模板 成员函数“float Eigen::internal::erf_impl<float>::run(const Scalar)”时
4>          with
4>          [
4>              Scalar=float
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\src/SpecialFunctions/SpecialFunctionsImpl.h(1533): 参见对正在编译的函数 模板 实例化“float Eigen::internal::erf_impl<float>::run(const Scalar)”的引用
4>          with
4>          [
4>              Scalar=float
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\src/SpecialFunctions/SpecialFunctionsImpl.h(1533): 参见对正在编译的类 模板 实例化“Eigen::internal::erf_impl<float>”的引用
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\src/SpecialFunctions/SpecialFunctionsFunctors.h(194): 参见对正在编译的函数 模板 实例化“float Eigen::numext::erf<Scalar>(const Scalar &)”的引用
4>          with
4>          [
4>              Scalar=float
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\src/SpecialFunctions/SpecialFunctionsFunctors.h(193): 编译类 模板 成员函数“const float Eigen::internal::scalar_erf_op<float>::operator ()(const Scalar &) const”时
4>          with
4>          [
4>              Scalar=float
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\cxx11\src/Tensor/TensorEvaluator.h(329): 参见对正在编译的函数 模板 实例化“const float Eigen::internal::scalar_erf_op<float>::operator ()(const Scalar &) const”的引用
4>          with
4>          [
4>              Scalar=float
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\eigen\src/Core/util/Meta.h(318): 参见对正在编译的类 模板 实例化“Eigen::internal::scalar_erf_op<float>”的引用
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\cxx11\src/Tensor/TensorExpr.h(86): 参见对正在编译的类 模板 实例化“Eigen::internal::result_of<UnaryOp (float)>”的引用
4>          with
4>          [
4>              UnaryOp=Eigen::internal::scalar_erf_op<float>
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\cxx11\src/Tensor/TensorBase.h(31): 参见对正在编译的类 模板 实例化“Eigen::internal::traits<Derived>”的引用
4>          with
4>          [
4>              Derived=Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_erf_op<float>,const Eigen::TensorMap<Eigen::Tensor<float,1,0,Eigen::DenseIndex>,0,Eigen::MakePointer>>
4>          ]
4>          d:\ltp\ltp_graphsdp\thirdparty\eigen\unsupported\eigen\cxx11\src/Tensor/TensorExpr.h(112): 参见对正在编译的类 模板 实例化“Eigen::TensorBase<Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_erf_op<float>,const Derived>,0>”的引用
4>          with
4>          [
4>              Derived=Eigen::TensorMap<Eigen::Tensor<float,1,0,Eigen::DenseIndex>,0,Eigen::MakePointer>
4>          ]
4>          D:\ltp\ltp_graphsdp\thirdparty\dynet\dynet\nodes.cc(936): 参见对正在编译的类 模板 实例化“Eigen::TensorCwiseUnaryOp<Eigen::internal::scalar_erf_op<float>,const Derived>”的引用
4>          with
4>          [
4>              Derived=Eigen::TensorMap<Eigen::Tensor<float,1,0,Eigen::DenseIndex>,0,Eigen::MakePointer>
4>          ]
4>          D:\ltp\ltp_graphsdp\thirdparty\dynet\dynet\nodes.cc(948): 参见对正在编译的函数 模板 实例化“void dynet::Erf::forward_dev_impl<dynet::Device_CPU>(const dynet::Device_CPU &,const std::vector<const dynet::Tensor *,std::allocator<_Ty>> &,dynet::Tensor &) const”的引用
4>          with
4>          [
4>              _Ty=const dynet::Tensor *
4>          ]

-
图片说明

-
win64位编译的,我改了nodes.cc里的某些值类型,不改就报类型转换错误
-
如下图,(__int64)是我自己加上的,这样类型转换不报错了
-
图片说明
-
为什么这么改,是因为我查看了下类型
-
图片说明
-
然后就报了开头那样的错,不知道哪里出了问题
-
我开始以为是dynet的版本问题,改了一样报THIS_TYPE_IS_NOT_SUPPORTED这个错,
-
后来又发现dynet库与eigen库有关联,所以尽量将两个库的版本对应起来,具体对应对了没有,我也无法判断,反正试了很多种组合,都是报错
-
我又想,这些都是第三方库本身的文件啊,不能随便改动,但上面不改类型又报强转的错,改了还是报某些类型不支持的错,THIS_TYPE_IS_NOT_SUPPORTED
-
终归是数据类型的问题,dynet是神经网络库,那可能与gpu,cpu什么的有关吧,各个宏定义什么的,发现dynet里有如下代码
-
图片说明
-
我的理解是程序判断出没有cuda,所以执行了没有cuda的那些代码,高亮的那些
-
问题是我这是64位的Windows系统,我保证自己装了cuda的,怎么识别不到cuda呢?dynet库自己总会自动识别吧,还是说要我自己定义?又不知道在哪定义
-
至于除了第三方库之外的项目本身的源码,我都不知道错在哪,所以就不贴出来了
-
各位大佬,帮忙解决下吧,谢谢
-

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

相关推荐