WIN7 64位系统 配置 VS2008 + opencv2.3.1
参考:http://wiki.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.3.1
win7 下,安装的VS2008,然后搭配opencv2.3.1运行,报错为:fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突 。
解决方法:重新安装/修复VS2008 选择x64编译器 (注意在win32和x64下为vs编译器设置include和lib)
之后出现这个错误:(win32 debug 与 x64 debug 下错误代码不同)
注意的地方是:打开VS2008后,在工具---选项---项目和解决方案---VC++目录中,右侧的的框中,平台选择X64,然后在包含文件和库文件中添加上面文章中所说的目录,但不要直接添加OPENCV2.1下的,而是添加我们编译过的在OPENCV2.1\VC2008中相应的目录,而且是只添加我们编译过生成的那些目录,这些是刚才在X64编译的,如果同时添加的还有OPENCV2.1下的相应目录,要删掉,它们是给WIN32环境所使用的,不删掉的话编译程序时还会报错。
以上情况注意后,应该会成功的。如果没有注意,可能在X64的环境下调试OPENCV时会出现“无法识别的外部符号……,在……函数中引用”等等错误,以前这个问题出现的时候折磨了我好久,头文件和Lib文件等都已经添加,却还是无法识别,原因就是没有经过64位的编译。
折腾将近三天的,首先写一下失败的经历:
(1)windowsXP,vs2008,X64编译opencv2.1没能通过,cmake过了,vs2008基于X64平台编译没能通过。
(2)windowsXP,vs2008,X64编译opencv2.3.1,cmake就没能通过。
(3)windowsXP,vs2008,直接使用官方opencv2.3.1中的X64+2008配置,编译自己的程序,没能通过。
(4)win7,vs2008,直接使用官方opencv2.3.1中的X64+2008配置,编译自己的程序,debug下可以编译,不能运行,报错:配置不正确。release下可以编译运行。但不稳定,程序运行中遇到内存分配问题会break掉。
(5)win7,vs2008,X64编译opencv2.3.1,cmake就没能通过。
。。。。。。。。。。。。。。还有许多小的尝试都以失败告终,略。。。
似乎vs2008与win7家庭版不太兼容。
最后成功的解决方案:
win7 + vs2010 + opencv2.3.1(官方直接使用(不用自己编译))
转:http://blog.csdn.net/zackzhaoyang/article/details/6883996
1.先配置环境变量,这一步完成后,注销再登陆或者重启计算机后,环境变量才有用。
用户变量设置:变量:OPENCV,值:E:\opencv\build
2. 开始给以后所有的项目进行配置。
视图->解决方案资源管理器->选择左侧控件下方的”属性管理器”展开opencv,一直展开看到Microsoft.Cpp.Win32.user,对它右键选择属性。
然后对VC++目录下选项进行添加:(不要忘了前面的分号哦!)
E:\opencv\include\opencv;E:\opencv\include\opencv2;E:\opencv\build\include;E:\opencv\tbb30\include
3.下面对单个项目进行配置
项目->属性->连接器->输入
opencv_core231d.lib;opencv_highgui231d.lib;opencv_video231d.lib;opencv_ml231d.lib;opencv_legacy231d.l
把Debug换成Release(如果问你是否保存,则保存修改),再添加:(不要忘记分号哦!)
opencv_core231.lib;opencv_highgui231.lib;opencv_video231.lib;opencv_ml231.lib;opencv_legacy231.lib;opencv_i
231表示OpenCV的版本为2.3.1,其他版本的只要改下数字即可,VS2005,VS2008配置OpenCV也大同小异,例如2008要把VC10改成VC9等等
另:vs2010建立X64 plantform时要将create new project platforms选上(在property manager中就含有Rlease|X64了,以便设置其属性。否则没有),并copy settings from win32(win32的可执行文件,头文件,包含库的设置就继承过来了)