编译Touchlib出现问题(仍然尚未解决!)
编译Touchlib出现问题(仍然尚未解决!)
2009年10月18日
%$%#!@$^)*)#$%%^!A的B,C你的D的!
要疯掉了
!
编译Touchlib出现问题,搞了一整天还是没有搞定!
问题一:
syntax error : identifier 'CAMSchedule'
这主要是因为在不同SDK的目录里包含了 多个 schedule.h file 和 refclock.h
因此需要在 Tools-> options -> vc++ directories -> include
中调整 include 的顺序
将samples/multimedia/directshow/baseclasses 放到其他的sdk之前即可
搞定!
问题二:
输出信息:
1>正在生成代码...
1>正在编译资源清单...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>正在链接...
1> 正在创建库 D:\Program Files\touchlib\build\VC8\/../../lib/touchlibd.lib 和对象 D:\Program Files\touchlib\build\VC8\/../../lib/touchlibd.exp
1>LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>DSVLCaptureFilter.obj : error LNK2019: 无法解析的外部符号 __imp__CoInitialize@4,该符号在函数 "public: __thiscall DSVLCaptureFilter::DSVLCaptureFilter(char *)" (??0DSVLCaptureFilter@@QAE@PAD@Z) 中被引用
1>D:\Program Files\touchlib\build\VC8\\..\..\bin\touchlibd.dll : fatal error LNK1120: 1 个无法解析的外部命令
1>生成日志保存在“file://D:\Program Files\touchlib\src\Debug\BuildLog.htm”
1>touchlib - 2 个错误,93 个警告
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
查阅了好多资料:
按照Touchlib官网的说法(官网提供的错误输出信息仅有错误信息,不包含冲突警告,我不知道是它只贴出来了错误信息,忽略了所有警告信息,还是压根就没有这条冲突警告):可能是没有增加环境变量;需要增加DSVL_HOME,值为dsvl的root目录;
然而确认这个我早已经配置好的!
按照有关linker的说法:可能是运行库时库的问题;
解决方法1:运行时库现在包含可防止混合不同类型的指令。如果试图在同一个程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此警告。例如,如果编译一个文件以使用一种运行时库,而编译另一个文件以使用另一种运行时库(例如单线程运行时库对多线程运行时库),并试图链接它们,则将得到此警告。应将所有源文件编译为使用同一个运行时库。有关更多信息,请参见使用运行时库(/MD、/MT 和 /LD)编译器选项。于是打开项目属性,在“配置属性-->C/C++-->代码生成-->运行时库”中将“多线程(/MT)”修改为“多线程调试(/MTd)”,再重新调试一下,问题解决。
尝试过,确定无效!
解决方法2:找到需要调用的模块的工程,重新编译,使其生成该运行时库下的.lib文件。
尝试过,确定无效!
按照Linker的又一个说法:涉及到加载库顺序的问题(比如MFC库加载一定要在标准C库之前,我猜想是因为MFC也需要加载标准C库,因此就不会二次加载标准C库)。
解决方法1:需要对连接顺序进行调整。
尝试过,仍然确定无效!
解决方法2:忽略所有默认库,不过这样可能会出问题。
尝试过,果然出问题,因为程序确实调用了很多默认库,绝对不可以全部忽略。
解决方法3:忽略冲突的默认库。
尝试过,冲突倒是没有了,但是仍然有这样的错误信息,又回到了官网提供的连接错误问题(这次确实没有了冲突警告(那是当然的,冲突的默认库根本没有加载嘛!))
1>DSVLCaptureFilter.obj : error LNK2019: 无法解析的外部符号 __imp__CoInitialize@4,该符号在函数 "public: __thiscall DSVLCaptureFilter::DSVLCaptureFilter(char *)" (??0DSVLCaptureFilter@@QAE@PAD@Z) 中被引用
抓狂,无奈,崩溃ing!
%¥%@¥!#%!%)**IOIPPDD你CAX的Y!
吃饭去!