最近做一个opencv+vc6的一个图像工程,项目中使用的vc太老了,希望移植代码到vs2008.
1.先搭建vs2008+opencv:http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.3.1
2.代码拿过来直接编译,错误多多,出现编译错误:LINK : fatal error LNK1104: cannot open file 'LIBC.lib'
解决办法,在Project-->Setting-->Linker-->Command Line-->Additional options中加入: /nodefaultlib:libc
3.warning: D9035 : Fr"选项已否决,并将在将来的版本中移除
D9036 : 使用“FR”而不使用“Fr"
解决方法:
设置Project propert/C/C++/浏览信息/启用浏览信息/“无本地符号(/Fr)"---->"包含所有浏览信息(/FR);
4.warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
这个问题是C语言里面某些函数的安全性检查通不过。消除Warning信息方法:
(1)按照编译器推荐的把函数改为安全的。例如:strcpy改为strcpy_s;itoa改为_itoa_s等等;
(2)或设置Project -> Properties -> Configuration Properties -> c/c++ -> Preprocessor -> Preprocessor Definitons里面添加 _CRT_SUCURE_NO_WARNINGS / _CRT_SUCURE_NO_DEPRECATE
(3)#pragma warning( disable : 4996 ) //guobo add because of "warning C4996: '_vsnprintf'"
5.error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::Co.....
解决方法,
Property page ->C/C++ ->Language ->treat Wchar-t 改为 No
6.LINK : fatal error LNK1104: cannot open file 'LIBC.lib'
解决方法:在Project-->Setting-->Linker-->Command Line-->Additional options中加入: /nodefaultlib:libc
7.其他问题也有一些函数声明类型及变量转换的问题,一一解决掉就ok了。
8.我负责的只是一个dll文件,由于.exe文件是vc6编译的,两者之间还是不能一起工作。.exe文件工程比较大,移植工作也就搁浅了。
参考:
http://blog.csdn.net/lcbiotech/article/details/4762935
http://blog.csdn.net/anson_niu/article/details/4154440
···