vs2005编译dxsdk9环境配置

系统环境:
XP Professional sp3
Microsoft Visual C++ 2005   77626-009-0000007-41206
DirectX 9.0(9.0b) SDK Update - (Summer 2003)

第一步、编译T264.lib工程

1>------ Build started: Project: t264lib, Configuration: Debug Win32 ------

1>Performing Custom Build Step

1>'nasm' 不是内部或外部命令,也不是可运行的程序

1>或批处理文件。

1>Project : error PRJ0019: A tool returned an error code from "Performing Custom Build Step"

1>Build log was saved at "file://f:/PCI参考程序/t264-src-0.14/avc-src-0.14/avc/build/vc71/Debug/lib/BuildLog.htm"

1>t264lib - 1 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

安装了VVPP5.EXE弹出错误信息

试着安装vs6sp5.exe,安装完后提示重启计算机,再次编译t25lib工程,

1>------ Build started: Project: t264lib, Configuration: Debug Win32 ------

1>Performing Custom Build Step

1>'nasm' 不是内部或外部命令,也不是可运行的程序

1>或批处理文件。

1>Project : error PRJ0019: A tool returned an error code from "Performing Custom Build Step"

1>Build log was saved at "file://f:/PCI参考程序/t264-src-0.14/avc-src-0.14/avc/build/vc71/Debug/lib/BuildLog.htm"

1>t264lib - 1 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

http://sourceforge.net/projects/nasm下载nasm-0.98.36-win32.rar:解压之后,把nasmw.exe重命名为nasm.exe,然后复制到D:/Program Files/Microsoft Visual Studio8/VC/Bin目录下,再次编译,通过。在/t264-src-0.14/avc-src-0.14/avc/build/bin目录下可以看到生成的t264libd.lib。备注:可以试试先跳过安装vs6sp5.exe这一步,待拷贝nasm.exe编译后出错再来安装vs6sp5.exe。

第二步、编译baseclasses

打开你的dx的sdk安装目录,例如:C:/DXSDK/Samples/C++/DirectShow/,这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程。

1. 双击baseclasses.sln打开,提示我们需要转换工程,按提示转换就是了,编译提示错误:
1>D:/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h(222) : error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>D:/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h(222) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h(5940) : error C2146: syntax error : missing ';' before identifier 'Buffer'
1>D:/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>D:/Microsoft Visual Studio 8/VC/PlatformSDK/include/winnt.h(5940) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:/DX90SDK/Samples/C++/DirectShow/BaseClasses/ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
在Tools->Options->Projects and solutions->vc++ directories->show directories for里选择include files然后增加
D:/DX90SDK/Include
D:/DX90SDK/Samples/C++/DirectShow/BaseClasses
D:/DX90SDK/Samples/C++/Common
可能会问题依旧,调整一下include files的顺序吧,把他们都放在最后,例如我的环境:
$(VCInstallDir)include
$(VCInstallDir)atlmfc/include
$(VCInstallDir)PlatformSDK/include
$(FrameworkSDKDir)include
D:/DX90SDK/Include
D:/DX90SDK/Samples/C++/DirectShow/BaseClasses
D:/DX90SDK/Samples/C++/Common
然后在project->BaseClasses properties->configuration->C/C++ -> General->Additional Include Directories里面的内容(.,../../../../include)删掉,重新编译,PVOID64的错误消失,原因如下:POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft Visual Studio 8/VC/PlatformSDK/Include/basetsd.h(23):#define POINTER_64 __ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变include files的优先级即可。当然,也可以改写winnt.h中的代码,在下面这两行:typedef  void  *PVOID; typedef  void *POINTER_64 PVOID64;之前增加一行:#define  POINTER_64   __ptr64。

2. 到目前为止,还剩下:BaseClasses/ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int这个错误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。

3. 接着编译,提示error C2065: 'Count' : undeclared identifier等等错误,这个是微软的历史遗留问题了,C++标准语法的问题,因为在之前在for循环内定义的变量可以在for之外的地方使用,即在第一个for里for(int i,...),以后的for再使用i不必再声明,解决方法也很简单,打开project->BaseClasses properties->configuration->C/C++->Language->Force Comformance in For Loop Scrope设置为No即可。当然,也可以手动改代码,增加一个声明就是了。

经过上面几个步骤,应该是可以顺利编译了,对于其它版本的工程,照样设置就可以了,总共编译出下面4个文件备用:
BaseClasses/Debug/strmbasd.lib
BaseClasses/Debug_Unicode/strmbasd.lib
BaseClasses/Release/STRMBASE.lib
BaseClasses/Release_UnicodeSTRMBASE.lib
你或许需要在Tools->Options->Projects and solutions->vc++ directories->show directories for->library files里把它们加进去。

第三步、接下来编译dshow工程

1. 1>------ Build started: Project: dshow, Configuration: Debug Win32 ------

1>Compiling...

1>stdafx.cpp

1>f:/pci参考程序/t264-src-0.14/avc-src-0.14/avc/dshow/stdafx.h(12) : fatal error C1083: Cannot open include file: 'streams.h': No such file or directory

1>Build log was saved at "file://f:/PCI参考程序/t264-src-0.14/avc-src-0.14/avc/dshow/Debug/BuildLog.htm"

1>dshow - 1 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这当然是添加头文件了,在Tools->Options->Projects and solutions->vc++ directories->show directories for里选择include files,环境如下:

$(VCInstallDir)include
$(VCInstallDir)atlmfc/include
$(VCInstallDir)PlatformSDK/include
$(FrameworkSDKDir)include
C:/DXSDK/Include
C:/DXSDK/Samples/C++/DirectShow/BaseClasses
C:/DXSDK/Samples/C++/Common

同时在Tools->Options->Projects and solutions->vc++ directories->show directories for里选择Library files添加选项,环境如下:

$(VCInstallDir)lib

$(VCInstallDir)atlmfc/lib

$(VCInstallDir)atlmfc/lib/i386

$(VCInstallDir)PlatformSDK/lib

$(FrameworkSDKDir)lib

$(VSInstallDir)

$(VSInstallDir)lib

C:/DXSDK/Lib

D:/Program Files/Microsoft Visual Studio/VC98/Lib,这里我曾试图改为D:/Program Files/Microsoft Visual Studio8/VC/Lib,结果提示找不到库文件,搜索了下,确实没有,不知道为什么VS2005下面为什么没有。

2. 编译

1>------ Build started: Project: dshow, Configuration: Debug Win32 ------

1>Compiling...

1>stdafx.cpp

1>c:/dxsdk/samples/c++/directshow/baseclasses/ctlutil.h(278) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

1>d:/program files/microsoft visual studio 8/vc/platformsdk/include/uuids.h : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

1>Build log was saved at "file://f:/PCI参考程序/t264-src-0.14/avc-src-0.14/avc/dshow/Debug/BuildLog.htm"

1>dshow - 1 error(s), 1 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

参见上文Baseclass设置,再次编译通过。这时可以通过GraphEdit在directshow Filters中看到多了T264Dec、T264Enc和T264Splitter。这样,就可以调试了。

期间碰到的问题

1. error LNK2001: unresolved symbol "public: virtual unsigned long __stdcallCBaseFilter::NonDelegatingRelease(void)"?NonDelegatingRelease@CBaseFilter@@UAGKXZ)

这个很明显是directshow库的问题,但是当时我们已经包含了strmbasd.Lib,也就没有注意到这个库到底对不对,后来在网上搜索了下,该库分为Debug、Debug_Unicode、Release和Release_Unicode四种,也就是前面提到的,改为C:/DXSDK/Samples/C++/DirectShow/BaseClasses/Debug/strmbasd.Lib就可以了,下次再出现这种链接不到的情况,可以多往这个方面想想。

2. 1>Linking...

1>   Creating library Debug/dshow.lib and object Debug/dshow.exp

1>Embedding manifest...

1>Performing registration

1>Project : error PRJ0019: A tool returned an error code from "Performing registration"

1>Build log was saved at "file://f:/PCI参考程序/t264-src-0.14/avc-src-0.14/avc/dshow/Debug/BuildLog.htm"

1>dshow - 1 error(s), 3 warning(s)

========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

明明上一次编译成功了,之后又编译会出现这种情况,先Clean再编译,还是不行的话试试在Project/Properties/Configuration Properties/Linker/Command Line中添加/wd4430。再次编译通过。

参考资料:

1. wutong_login的专栏------菜鸟初学H.264--VC6下调试T264编解码器全过程

2. 我心飞翔(逸枫)的日志------DirectShow学习之一在vs2005中配置directshow开发环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值