《在MFC中使用OpenCV》例程编译问题解决方法

来源:互联网 发布:nginx 入门指南 pdf 编辑:程序博客网 时间:2024/06/11 12:12

         OpenCV中文网上的《MFC中使用OpenCV》是OpenCV应用在Windows图形界面的范例,是用VC++ 6.0规范写的,如果用VS2008编译要稍作修改。而直接用VC++ 6.0编译却无法通过。

例程链接:

http://www.opencv.org.cn/index.php/%E5%9C%A8MFC%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV

 

今天完成了这个程序的调试。下面列出问题及解决方案:

1、第一个问题,也许是MFC初学者常犯的错误:fatal errorC1083: Cannot open precompiled header file: 'Release/CVMFC.pch': No such fileor directory

属于MFC基本问题,只需要执行build->rebuildall即可

 

2、当编译通过时,链接会出现了如下错误

Linking...
CameraDSA.obj : error LNK2001: unresolved external symbol _IID_ISampleGrabber
CameraDSA.obj : error LNK2001: unresolved external symbol _CLSID_NullRenderer
CameraDSA.obj : error LNK2001: unresolved external symbol _CLSID_SampleGrabber
CameraDSA.obj : error LNK2001: unresolved external symbol _LOOK_UPSTREAM_ONLY
CameraDSA.obj : error LNK2001: unresolved external symbol_CLSID_CaptureGraphBuilder2
CameraDSA.obj : error LNK2001: unresolved external symbol_IID_ICaptureGraphBuilder2
Release/CVMFC.exe : fatal error LNK1120: 6 unresolved externals
Error executing link.exe.

CVMFC.exe - 7error(s), 0 warning(s)

可以看出,是和CameraDSA.cpp有关。而CameraDSA.cpp只引用了一个头文件以及库,在程序中预处理代码如下

#include"stdafx.h" // 2010.8.14修改

#pragmacomment(lib,"Strmiids.lib")

可以看出,这个程序需要用例程中的DirectShow\Lib文件夹下的strmiid.lib文件。当我们在tools->option->directories中的lib file中把此文件夹添加到最后时,仍然有错误。

既然例程中包含的strmiid.lib含有这些外部符号,那么可能的原因只有一个,就是windows系统SDK包含了strmiid.lib,而这货因为版本过高而在VC++6.0中无法支持,但VC++6.0检查到C:\Program Files\Microsoft Visual Studio\VC98\LIB中的strmiid.lib发现不兼容,就只报出这7个错误,不向下查找了自备的strmiid.lib了。

解决方法非常简单,但非常有用:就是在tools->option中的lib file把例程的lib文件夹前置到最顶头,就发现这7个错误消失了。也就是成功编译链接。

3、最后一个问题比较简单,网上也有相应的答案

could notexecute Invalid directory
win32 error 267


方法:分别设置program->setting中的releasedebug中的Executable fordebug sessionWorking Directory分别一致即可。

 

原创粉丝点击