最近在编译旧DirectShow SDK中的Contrast例子的时候出现了Link Error,花了几个小时,才解决掉这个问题,记录在这里,希望能给大家帮助。
一般情况下,参考下面两个网址应该可以解决掉大多数Link Error了:
http://topic.csdn.net/t/20041118/17/3565951.html
http://blogs.msdn.com/vsdteam/archive/2005/11/16/linker_error_lnk2019_lnk2001.aspx
不过我的情况比较特殊,我是下载了最新的
Windows SDK: 6.0.6001.18000.367-KRMSDK_EN.iso
和DirectX SDK: dxsdk_march2008.exe
然后用最新的baseclass的lib来编译旧的例子,而且更要命的是我还是在旧的SDK的结构(实际上也就是使用旧的SDK baseclass header)下编译例子,这样导致无论如何都会有
Link Error,在花了几个小时排除掉是环境配置的问题之后,我才意识到是旧的baseclass和新的baseclass之间的区别,更确切的说是新的baseclass使用了新的Header Annotations导致
编译器在生成函数声明的时候与以前有所不同,导致Link时无法找到对应的lib项目,所以出现了Link Error。
对于这种情况,其实最简单的办法就是把旧的例子拷贝到新SDK对应的目录下,然后编译去掉一些小的错误就可以了。
BTW: 如果新SDK有Contrast这个例子也就不用害的我搞了一夜了,sigh...
20080520 update:
http://www.directshow.cn/forum/viewthread.php?tid=3381&extra=page%3D1
1>CFilterASFWriter.obj : error LNK2019: unresolved external symbol "public: __thiscall CPosPassThru::CPosPassThru(char const *,struct IUnknown *,long *,struct IPin *)" (??0CPosPassThru@@QAE@PBDPAUIUnknown@@PAJPAUIPin@@@Z) referenced in function "public: virtual long __stdcall CFilterASFWriter::NonDelegatingQueryInterface(struct _GUID const &,void * *)" (?NonDelegatingQueryInterface@CFilterASFWriter@@UAGJABU_GUID@@PAPAX@Z)
这个问题咋一看就是字符集问题,可真拿来编译一下,还被绕进去了,幸好对VC的各项设置还算熟悉,最后还是解决了这个问题,居然还是个bug,有点怀疑的,不过不敢确认,还是最后找到了权威的回答,才确认。
一般情况下,参考下面两个网址应该可以解决掉大多数Link Error了:
http://topic.csdn.net/t/20041118/17/3565951.html
http://blogs.msdn.com/vsdteam/archive/2005/11/16/linker_error_lnk2019_lnk2001.aspx
不过我的情况比较特殊,我是下载了最新的
Windows SDK: 6.0.6001.18000.367-KRMSDK_EN.iso
和DirectX SDK: dxsdk_march2008.exe
然后用最新的baseclass的lib来编译旧的例子,而且更要命的是我还是在旧的SDK的结构(实际上也就是使用旧的SDK baseclass header)下编译例子,这样导致无论如何都会有
Link Error,在花了几个小时排除掉是环境配置的问题之后,我才意识到是旧的baseclass和新的baseclass之间的区别,更确切的说是新的baseclass使用了新的Header Annotations导致
编译器在生成函数声明的时候与以前有所不同,导致Link时无法找到对应的lib项目,所以出现了Link Error。
对于这种情况,其实最简单的办法就是把旧的例子拷贝到新SDK对应的目录下,然后编译去掉一些小的错误就可以了。
BTW: 如果新SDK有Contrast这个例子也就不用害的我搞了一夜了,sigh...
20080520 update:
http://www.directshow.cn/forum/viewthread.php?tid=3381&extra=page%3D1
1>CFilterASFWriter.obj : error LNK2019: unresolved external symbol "public: __thiscall CPosPassThru::CPosPassThru(char const *,struct IUnknown *,long *,struct IPin *)" (??0CPosPassThru@@QAE@PBDPAUIUnknown@@PAJPAUIPin@@@Z) referenced in function "public: virtual long __stdcall CFilterASFWriter::NonDelegatingQueryInterface(struct _GUID const &,void * *)" (?NonDelegatingQueryInterface@CFilterASFWriter@@UAGJABU_GUID@@PAPAX@Z)
这个问题咋一看就是字符集问题,可真拿来编译一下,还被绕进去了,幸好对VC的各项设置还算熟悉,最后还是解决了这个问题,居然还是个bug,有点怀疑的,不过不敢确认,还是最后找到了权威的回答,才确认。