在编译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库自己总会自动识别吧,还是说要我自己定义?又不知道在哪定义
-
至于除了第三方库之外的项目本身的源码,我都不知道错在哪,所以就不贴出来了
-
各位大佬,帮忙解决下吧,谢谢
-