笔者x64 Win7系统下VS2010配置OpenCV后进行图片显示的小程序测试,遇到以下两个问题:
1、出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
解决方案:项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”。
Q:该方法治标不治本,每次新建一个项目时都要重新配置。还有为什么这么做就能解决该问题呢?
A:1)治本的方法:
<1>项目\属性\配置属性\清单工具\输入和输出\嵌入清单:原来是“是”,改成“否”。
<2>项目|项目属性|配置属性|连接器|清单文件|生成清单 “是”改为“否”。
<3>若以上两步后仍没解决问题,则按照以下方法解决:
查找是否有两个cvtres.exe。一个是C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe, 另一个是C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe。右键属性|详细信息 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。
删除旧版本的cvtres.exe后,就不需要每次都设置配置了。
2)为什么这么操作可以解决问题?笔者未查明原因,同仁们有清楚的可以给出评论。
2、1>lena.obj : error LNK2019: 无法解析的外部符号 _cvReleaseImage,该符号在函数 _main 中被引用
1>lena.obj : error LNK2019: 无法解析的外部符号 _cvDestroyWindow,该符号在函数 _main 中被引用
1>lena.obj : error LNK2019: 无法解析的外部符号 _cvWaitKey,该符号在函数 _main 中被引用
1>lena.obj : error LNK2019: 无法解析的外部符号 _cvShowImage,该符号在函数 _main 中被引用
1>lena.obj : error LNK2019: 无法解析的外部符号 _cvNamedWindow,该符号在函数 _main 中被引用
1>lena.obj : error LNK2019: 无法解析的外部符号 _cvLoadImage,该符号在函数 _main 中被引用
1>c:\users\yunyan\documents\visual studio 2010\Projects\lena\Debug\lena.exe : fatal error LNK1120: 6 个无法解析的外部命令
1>
1>生成失败。
1>
1>已用时间 00:00:01.52
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
解决方案:出现错误的原因可能有二,一种是系统配置不对(如x64位下仍使用Win32则错),另一种是少添加了库。笔者的是第一种原因,因为一直习惯了在x86下编写Win32程序,所以编译的时候仍使用了Win32,那么必然运行失败。该问题怎么破呢?如下:
右击项目名称,选择“属性”,弹出页面的最上方中间一项“平台”选择x64,在该平台下按照OpenCV中文网的配置过程(http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.4.4),分别配置VC++目录和连接器输入,问题则圆满解决。
同理如果是第二种原因造成的,则也参考OpenCV中文网的配置过程(http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.4.4)。