AI文艺猫 2019-03-20 19:01 采纳率: 100%
浏览 492
已采纳

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

在编译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条回答 默认 最新

  • AI文艺猫 2019-03-25 15:59
    关注

    把库更新就行了。。。。。。。。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序