首页 - 技术 - vs2010 64位版本_配置DirectShow开发环境(VS2010,64位Win8系统)

vs2010 64位版本_配置DirectShow开发环境(VS2010,64位Win8系统)

2023-09-19 08:00

本文讲述在系统为win7的64位机,开发环境为vs2010且openCV版本为2.4.8的环境下,配置openCV的操作过程。

我的openCV安装在路径D:\openCV\opencv\中。(清楚这个安装路径很重要,后面本文提供的路径都是我电脑的路径,大家一定要根据自己的路径去做适当的更改)

(一)

右击计算机->属性->高级系统设置->环境变量

然后在 系统变量 里面找到 Path(如果没有就新建), ?然后将“ ??;D:\openCV\opencv\build\x86\vc10\bin ? ?” 添加进去,然后重启电脑(引号里面的是路径,注意最前面有个分号,以便和前面原有的路径分离,这个路径是我的路径,大家赢根据自己openCV的安装路径做适当更改,下面的路径也是,以后就不再赘述了)。

(二)

打开VS2010,创建一个win32控制台应用程序。

然后右键项目名称->"属性->配置属性->VC++目录->包含目录(右边位置)。

将这串目录拷贝进去:

D:\openCV\opencv\build\include\opencv2;D:\openCV\opencv\build\include\opencv;D:\openCV\opencv\build\include

还是在该页面,选择库目录将下面的拷贝进去

D:\openCV\opencv\build\x86\vc10\lib

(三)

点击 连接器->输入->附加依赖项(右边位置)(下面类库里的数字根据版本号而定,如果是openCV2.4.9,则后面的数字都是249),将这串lib拷贝进去。

opencv_video248d.lib opencv_ts248d.lib opencv_objdetect248d.lib opencv_ml248d.lib opencv_legacy248d.lib opencv_imgproc248d.lib opencv_highgui248d.lib opencv_gpu248d.lib opencv_flann248d.lib opencv_features2d248d.lib opencv_core248d.lib opencv_calib3d248d.lib opencv_contrib248d.lib opencv_nonfree248d.lib opencv_ocl248d.lib opencv_photo248d.lib opencv_superres248d.lib opencv_videostab248d.lib opencv_stitching248d.lib

(四) 在属性界面,左上角的配置一栏,将debug改为release,然后重复操作第二步和第三步。但是第三步的文件名都去掉一个“d”字母,如下:

opencv_video248.lib opencv_ts248.lib opencv_objdetect248.lib opencv_ml248.lib opencv_legacy248.lib opencv_imgproc248.lib opencv_highgui248.lib opencv_gpu248.lib opencv_flann248.lib opencv_features2d248.lib opencv_core248.lib opencv_calib3d248.lib opencv_contrib248.lib opencv_nonfree248.lib opencv_ocl248.lib opencv_photo248.lib opencv_superres248.lib opencv_videostab248.lib opencv_stitching248.lib (五)

目前来看,配置完成了,用一段代码测试一下。(将文件名为“colour.jpg”的图片放到工程名文件夹下的工程名文件夹下,就是如果工程叫test,则放到test文件夹下的test文件夹里)

#include "stdafx.h"

#include "opencv\highgui.h"

int main(int argc,char**argv)

{

IplImage *img = cvLoadImage("colour.jpg");

cvNamedWindow("window",CV_WINDOW_AUTOSIZE);

cvShowImage("window",img);

cvWaitKey(0);

cvReleaseImage(&img);

cvDestroyWindow("window");

return 0;

}

如果运行成功,将可以显示图片。如下图

(六)

一般情况下,以上的几个步骤如果操作正确,即可成功显示图像,但是,若仍旧无法显示图像,可以再进行以下几步。

右键项目名称,选择属性

?? -> Configuration Properties

?????? -> Linker (General)

????????? -> Enable Incremental Linking-> "No (/INCREMENTAL:NO)"

并且在

Vs2010的安装目录 D:\Microsoft Visual Studio2010\VC\bin? 目录下删除cvtres.exe文件

这个时候,一般就可以正确的显示图片了。

2015年2月6日 ? 西安交通大学

?

??配置DirectShow开发环境(VS2010,64位Win8系统)

目前,新版的DirectShow并没有包括在DirecxtX中一起发布,而是和Windows SDK一起打包发布,因此首先要下载最新的Windows SDK,里面包含了DirectShow的头文件和库文件。

下载地址:http://www.gsm-guard.net/en-us/download/details.aspx?id=8442

由于计算机安装的是64位Win8操作系统,所以选择下载 GRMSDKX_EN_DVD.iso,如果是32位操作系统就要选择下载 GRMSDK_EN_DVD.iso。 下载后安装,Windows SDK默认被安装到C:\Program Files\Microsoft SDKs\Windows\v7.1目录中。 为了利用DirectShow的基类开发应用程序,必须先编译其BaseClasses项目,一般都要生成两个版本的基类库,一个是Debug版,另外一个是Release版,分别用于调试期间和最后发布。 下面以生成Debug版本为例(生成Release版本与此相类似),用VS2010打开 C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses 下面的baseclasses项目文件,这时如果直接生成BaseClasses就会报错,必须先配置好VS2010的通用属性\ VC++目录\ 包含目录和库目录。点选属性管理器视图,点选Debug|Win32,打开Debug属性页中的通用属性的各个子项,选取VC++目录,然后编辑”包含目录“和”库目录“。

包含目录包括: C:\Program Files\Microsoft SDKs\Windows\v7.1\Include C:\Program Files\Microsoft Visual Studio 10.0\VC\include

库目录包括: C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib

配置好VC++目录后,在菜单中点选生成\配置管理器,在配置项中选取Debug。关闭配置管理器页面后,再点选生成\生成BaseClasses,就可以顺利生成Debug版本的基类了,基类的库文件 strmbasd.lib? 在?? C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug目录中。 与此相类似,Release版本的库文件 strmbase.lib 则在 Relesas 目录中。

在需要用DirectShow的基类开发应用程序的项目中,还有把基类的头文件和库文件所在的目录添加到应用程序项目的VC++目录中(注意先后次序,否则可能报错):

包含目录包括:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\common

C:\Program Files\Microsoft SDKs\Windows\v7.1\Include

C:\Program Files\Microsoft Visual Studio 10.0\VC\include

库目录包括:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib

C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug

C:\Program Files\Microsoft Visual Studio 10.0\VC\lib

以上是针对当前项目配置包含目录和库目录。如果针对VS2010配置默认的包含目录和库目录,则不要在点选Debug|Win32后马上打开属性页,而是要点选Debug|Win32的子项 Microsoft.Cpp.Win32.user 后再打开属性页,然后按照上面的方法配置目录,这样,其他项目可以通过?从父级或项目默认设置继承就可以了。

另外,还需要在项目属性\配置属性\链接器\输入之中的? 依赖附件项? 中加入:strmbasd.lib; winmm.lib; msvcrtd.lib (各项之间,VC6用空格隔开就行了,VS2010一定要用”;“隔开)等库文件,否则会出现一大堆错误:

1>Dialog1.obj : error LNK2001: 无法解析的外部符号 _CLSID_FilterGraph 1>Dialog1.obj : error LNK2001: 无法解析的外部符号 _IID_IGraphBuilder

......

error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 "public: int __thiscall CAMMsgEvent::WaitMsg(unsigned long)" (?WaitMsg@CAMMsgEvent@@QAEHK@Z) 中被引用

......

PS: 学习Directshow自带的 AmCap 例子可以尽快提高DirectShow的编程水平。

转自:http://www.gsm-guard.net/s/blog_48ef8bdd0101hc77.html

编译环境:

(1) win7/64

(2) VS2010

(3) www.gsm-guard.net

2.1?开始? -> 所有程序 ->Micorsoft Visual Studio 2010->visual studio tools-> Visual Studio x64 win64 command prompt (2010)

?????2.2?用cd命令 进入D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6文件夹

?????2.3?设置如下环境变量:

??????????? set QTDIR=D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6

????????????set QMAKESPEC=win32-msvc2010

? ?2.4?修改一些错误:

? ? ? ? (1)打开这个文件:\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp?????? 按Ctrl+G定位?到?327?行,?改为:????return?WEB_UI_STRING("Look?Up?\"\"",?"Look?Up?context?menu?item?with?selected?word").replace("",?truncatedStringForLookupMenuItem(selectedString));

?????? 注意第一个括号内look?up?后的双引号。

? ? ? (2)--- mkspecs/win32-msvc2010/qmake.conf????????+++ mkspecs/win32-msvc2010/qmake.conf? ? ? ?QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF

? ? ? ?QMAKE_LFLAGS_DEBUG? ? ? = /DEBUG

? ? ? ?修改为? ? ? QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO

? ? ? QMAKE_LFLAGS_DEBUG? ? ? = /DEBUG /INCREMENTAL:NO

???2.5? 配置编译QT的选项 (可利用configure -hlep命令查看各选项意义,自己选择编译模块)

???????? ? configure -opensource -nomake demos -nomake examples -platform win32-msvc2010 -webkit

??????? 提示:Do you accept the terms of the lisence????输入y, 则开始编译qmake工具

???2.6? Configure完成后,会在D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6下生成Project.sln,使用VS2010打开后进行release/debug x64 编译

错误 234?error?LNK2019: 无法解析的外部符号?_HBeginPaint,该符号在函数 "private: static struct HDC__?*?__cdeclWebCore::PluginView::hookedBeginPaint(struct HWND__?*,struct tagPAINTSTRUCT *)" (?hookedBeginPaint@PluginView@WebCore@@CAPEAUHDC__@@PEAUHWND__@@PEAUtagPAINTSTRUCT@@@Z) 中被引用E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)QtWebKit错误 235?error?LNK2019: 无法解析的外部符号?_HEndPaint,该符号在函数 "private: static int?__cdeclWebCore::PluginView::hookedEndPaint(struct HWND__?*,struct tagPAINTSTRUCT const *)" (?hookedEndPaint@PluginView@WebCore@@CAHPEAUHWND__@@PEBUtagPAINTSTRUCT@@@Z) 中被引用E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)QtWebKit通过Find Solution,你会找到hookedBeginPaint的定义在webcore--->PluginViewWin.cpp中。出问题代码如下:如上图,打钩地方_HBeginPaint函数是一个无法解析外部符号,其实本质原因无非就是_HBeginPaint定义代码,没有加载进入工程当中。这是为什么呢???从本源文件开头,有_HBeginPaint的定义,你会发现这是一种c++调用汇编代码方式。

#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)

extern "C" HDC __stdcall _HBeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);

extern "C" BOOL __stdcall _HEndPaint(HWND hWnd, const PAINTSTRUCT* lpPaint);

#endif

验证想法的是,在PluginViewWin.cpp同目录下,有一个汇编文件PaintHooks.asm,使用普通记事本打开,你会发现,里面就是定义了

_

HBeginPaint函数。

PaintHooks.asm里面内容为:

到这里我们就可以下一个结论了,对于vs2010为什么会报无法解析外部符号

_

HBeginPaint。

原因,就是vs2010采用c++编译器,是无法编译汇编语言的。所以需要设置汇编编译器,单独编译PaintHooks.asm文件,成为二进制文件PaintHooks.obj。

就这问题,笔者重新罗列一下步骤:

1.选中webcore这个工程,右键---》添加----》现有项,将PaintHooks.asm加入到工程当中,在Source Files分类中,可以找到这个文件。

2.选中webcore这个工程,右键---》生成自定义----》勾选“masm(.targets .props)”选项---》确定

3.在Source Files分类中,可以找到PaintHooks.asm,选中,右键---》属性--》在“常规”选项卡中,对“项类型”选择“Microsoft

Macro assembler”--》确定。

4.选中PaintHooks.asm,右键----》编译,在.\src\3rdparty\

webkit

\Source\WebCore\tmp\obj\release

_

shared目录下,就会生成PaintHooks.obj二进制文件,这个文件就可以被c

++代码直接调用,具体调用回到前面所述c++调用汇编函数代码。

tst

_

qwebpage/tst

_

qwebview/tst

_

qwebframe:

以上三个工程属于同一种解决方法。

首先,按照提示,定位到问题所在行2682,如下图

根据vs2010红线提示功能,你会发现TEST

_

SOURCE

_

DIR提示有问题。鼠标放在所有变量,会提示一个路径。实际上这个路径就是qwebpage/qwebview/qwebframe的源码路径。TEST

_

SOURCE

_

DIR宏在这里无法识别,所以,只要在每一个出问题源文件人工定义该宏值,就可以handle这个bug。我电脑的该路径为E:\Libraries\qt4\src\3rdparty\

webkit

\Source\

WebKit

\qt\tests\

在头文件定义下面加入宏定义为:

#include

#include

#include

#define TESTS_SOURCE_DIR "E:/Libraries/qt4/src/3rdparty/webkit/Source/WebKit/qt/tests/"

重新编译,就可以解决这个问题了。

?

安装QT Addin 1.1.11插件

? ? ? ? ? ? ??插件也是什么都不用改,按照默认配置进行安装。?QT Addin 1.11安装完成之后,就可以在VS里面进行QT项目的开发了。

配置VS2010

? ? ? ? ? ?然后介绍怎么配置VS2010中的QT目录。

? ? ? ? ? ?打开VS2010,发现菜单栏多了QT的菜单。

? ? ? ? ??然后点击QT菜单项,选择QT Options选项。

? ? ? ? ? 然后按照下图中的步骤,点击Add, 然后选择QT的安装目录,最后点击确定就可以了。

第五步:安装Visual Assist X并配置。

? ? ??

首先安装Visual Assist X的安装包,按照默认安装即可。

? ? ? 然后重新打开VS2010,发现菜单项多了VAssistX。

? ? ??

? ? ? 然后,点击VAssistX菜单,并选择Visual Assist Options选项。

? ? ? 然后按照下面的步骤,依次点击,选择要包含的QT库文件。

? ? ?

? ? ? 最后要添加的常用的库为:(如果日后,要用其他的库文件,再添加即可)

? ? ? 最后再选择Visual Assist Options选项,点击Performance选项,点击Rebuild即可。

? ?

使用qt建立工程,报错

? ? ?

1:注意:打开main.cpp文件,否则 “Qt Project Settings”是灰色,不可选;

2:选择编译机器上的版本:

Version修改为Qt4.8.6版本,而不是msvc2010即可

0条大神的评论

发表评论