赞
踩
前几天在网上下载了一个算法(EDPF)的源代码,在vs2010上运行,出现了如下错误
1>LINK : fatal error C1047: 对象或库文件“EDLib.lib”是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库
1>LINK : fatal error LNK1257: 代码生成失败
开始上网查了一下,以为是外接的EDLib.lib文件是在低版本的编译器上编译生成的,不能在高版本上使用。转而去找了一台vs2008的机器,运行后出现了这样的错误:
release模式下:
debug模式下:
vs2008出现这样的错误是由于版本没有升级,在官网下载了一个升级包vs2008sp1,安装后程序运行正确。下载地址,VS2008中文版升级包:http://www.microsoft.com/downloads/details.aspx?familyid=27673C47-B3B5-4C67-BD99-84E525B5CE61&displaylang=zh-cn
这时我才意识到,所用的EDLib.lib库是在一个升级版的vs2008上编译得到的,至于在release和debug模式下出现的错误不一致,我就不明白了。
既然这个lib库是在vs2008上编译的,vs2010应该是可以兼容使用的,我又检查了最开始在vs2010下运行的这个程序的配置,是在release模式下运行的,我改为debug模式运行后正确,检查了release和debug的配置,发现“项目->属性->配置属性->常规->全程序优化” 在两个模式下不同,将这个选项改为 “无全程序优化”,之后程序就可以在两种模式下正常运行了。至于里面的原因我不太清楚,不过可以参考博客http://blog.csdn.net/cdn_founder/article/details/7741076,或许对大家有帮助。
通过这次调试得到一个结论,引用别人lib或者dll的时候,出现连接问题一般都是由于当前编译器版本过低,向上无法兼容;另外一些原因是编译器的设置问题,导致无法正确解析库文件。
个人经验所得,望大家指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。