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中的release和debug中的Executable fordebug session和Working Directory分别一致即可。