VS2015编译OpenCV2.4.11出现的错误的相关解决办法

1、 编译opencv_gpu出现下列问题
1>  graphcuts.cpp
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(124): error C2061: 语法错误: 标识符“NppiGraphcutState”
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(139): error C2833: “operator NppiGraphcutState”不是可识别的运算符或类型
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(139): error C2059: 语法错误:“newline”
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(140): error C2334: “{”的前面有意外标记;跳过明显的函数体
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(145): error C2143: 语法错误: 缺少“;”(在“*”的前面)
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(145): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(145): error C2238: 意外的标记位于“;”之前
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(131): error C2065: “pState”: 未声明的标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(136): error C2065: “pState”: 未声明的标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(136): error C3861: “nppiGraphcutFree”: 找不到标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(178): error C3861: “nppiGraphcutGetSize”: 找不到标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(186): error C2065: “nppiGraphcutInitAlloc”: 未声明的标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(194): error C3861: “nppiGraphcut_32s8u”: 找不到标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(199): error C3861: “nppiGraphcut_32f8u”: 找不到标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(250): error C3861: “nppiGraphcut8GetSize”: 找不到标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(258): error C2065: “nppiGraphcut8InitAlloc”: 未声明的标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(268): error C3861: “nppiGraphcut8_32s8u”: 找不到标识符
1>D:\opencv-2.4.11\modules\gpu\src\graphcuts.cpp(275): error C3861: “nppiGraphcut8_32f8u”: 找不到标识符
问题原因:
这是因为opencv 2.4.11不兼容CUDA 8.0,opencv 2.4.11在cuda 8.0之前发布的,opencv还来不及适配。
cuda 8.0中缺少了NppiGraphcutState的声明,而在cuda 6.5中是有该结构体的声明,具体查看 NVIDIA GPU Computing Toolkit\CUDA\v6.5\include\nppi_computer_vision.h, cuda 8.0中也有该文件,但里面是空的,而且CUDA7.5中也是空的。

解决办法:
将graphcuts.cpp文件中的声明 #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) 修改为 #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

2、 error C2382: “std::tuple<cv::Size,perf::`anonymous-namespace'::MatDepth,perf::`anonymous-namespace'::MatCn>::operator =”: 重定义
解决办法:

在cmake的时候就将BUILD_PERF_TESTS改成非勾选即不生成就可以解决问题。即改成如图所示:


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值