• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
经典环境(2)OpenCV412+OpenCV-Contrib +vs2015+cuda10.1编译

自己整理的3.49教程,一样的

https://www.cnblogs.com/kekeoutlook/p/13111481.html

过程一样

 

网友的

https://blog.csdn.net/Gordon_Wei/article/details/85775328?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

两大报错

1 cmake阶段 ffmpeg和sift的库没能下载下来,自己根据cmaedownload记录手动去网址下载,完了直接放在指定文件夹。

需要某飞机,付费吧 一个月5元

2 WIN10 sdk老版本问题报错 

我在编译opencv349 开始就要更新win10 sdk,那个生成的工程VS直接用了最新的,但是opencv4的vs工程却还是老版本,所以需要额外手动更换下。

(报错输出)

eoio_main.cpp
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(804): error C2065: “ID3D11Multithread”: 未声明的标识符
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(804): error C2923: “`anonymous-namespace'::ComPtr”: 对于参数“T”,“ID3D11Multithread”不是有效的 模板 类型变量
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(804): error C2133: “D3DDevMT”: 未知的大小
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(804): error C2512: “`anonymous-namespace'::ComPtr”: 没有合适的默认构造函数可用
76>  F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(127): note: 参见“`anonymous-namespace'::ComPtr”的声明
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(806): error C2100: 非法的间接寻址
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(806): error C2672: “IID_PPV_ARGS_Helper”: 未找到匹配的重载函数
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(806): error C2784: “void **IID_PPV_ARGS_Helper(T **)”: 未能从“`anonymous-namespace'::ComPtr *”为“T **”推导 模板 参数
76>  C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um\combaseapi.h(231): note: 参见“IID_PPV_ARGS_Helper”的声明
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(806): error C2660: “IUnknown::QueryInterface”: 函数不接受 1 个参数
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(808): error C2678: 二进制“->”: 没有找到接受“`anonymous-namespace'::ComPtr”类型的左操作数的运算符(或没有可接受的转换)
76>  F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(149): note: 可能是“T *`anonymous-namespace'::ComPtr<T>::operator ->(void) const”
76>  F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(808): note: 尝试匹配参数列表“(`anonymous-namespace'::ComPtr)”时
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(808): error C2039: “SetMultithreadProtected”: 不是“`anonymous-namespace'::ComPtr”的成员
76>  F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(127): note: 参见“`anonymous-namespace'::ComPtr”的声明
76>F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(809): error C2662: “void `anonymous-namespace'::ComPtr<T>::Release(void)”: 不能将“this”指针从“`anonymous-namespace'::ComPtr”转换为“`anonymous-namespace'::ComPtr<T> &”
76>  F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(809): note: 原因如下: 无法从“`anonymous-namespace'::ComPtr”转换为“`anonymous-namespace'::ComPtr<T>”
76>  F:\dongdong\0tool\navidia_cuda_opencv\OPENCV\opencv412_contrib_cuda10\opencv412_cuda10_contrib_sift\opencv412\modules\videoio\src\cap_msmf.cpp(809): note: 转换要求第二个用户定义的转换运算符或构造函数

 

 VS2015生成时 C2065 ‘ID3D11Multithread’: undeclared identifier 错误等; VS2015生成时 LNK1104 cannot open file '…\lib\Debug\opencv_world401d.lib’问题
只要发现了’ID3D11Multithread’: undeclared identifier 那么下边出现的一系列问题,包括LNK1104 cannot open file '…\lib\Debug\opencv_world401d.lib’等基本都是由它引起的。
我出现这个问题是由于 windows 10 SDK 版本低(10.0.10586.0版本),你可以在路径
C:\Program Files (x86)\Windows Kits\10\Include 下看到版本号
其中不包含所要用到的 ID3D11Multithread 。这时需要下载新版本的windows SDK(10.0.17134.0版本)
这里微软提供两种方法,
1.是下载安装win10的 windows 10 SDK
2.是通过VS进行安装 (VS2017 能够安装更高版本的 (10.0.17763.132))
下载地址:
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
下载后安装即可

这里需要注意,尽管有了新版本SDK,但是VS2015编译器默认还是使用了低版本,所以需要在VS中设置一下

首先,在 Class View(类视图) 窗口中(没有的在菜单 View(视图)中选择 Class View(类视图))选中所有的项目 (通过shift件 第一个和最后一个进行全选)

 

 

后再项目上右键,打开Properties (属性)对话框,修改Target Platform Version (目标平台版本) 选择10.0.17134.0。

 

 

 

 


到此就完成了错误的修改,全部重新生成解决方案 

 

 然后单独生成install工程

 

 

 

 

 

就可以到生成库 

 

 

 

 

posted on 2020-06-16 02:31  MKT-porter  阅读(388)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3