[心得]2010,这次坑了我一把

准备写一个图片格式转换的程序。

在网上下了个libpng,包括zlib。

解压后放在一起,看了下projects目录里面的工程。

用vs2008打开vstudiovstudio.sln提示文件版本太高,打开visualc71libpng.sln提示文件版本太低需要转换。

怕转换出什么问题,遂用vs2010打开了前面的工程。

在Debug模式下,编译生成,得到1个dll和2个lib。

后来自己用vs2008写程序,发现编译木有问题,但是执行程序出现Unhandled exception。

这是个很纠结的问题,原因可能有很多,一直debug不到,度娘也不知道。

最后终于还是问谷哥问到了,是因为编译dll和lib的时候用的vs2010,可能在一些优化配置的设置上和2008的默认有些区别。

我也懒得去一个一个对比到底是哪出了问题,直接用vs2010去写程序,果然也是没有问题。

写好程序在Debug模式下跑得效果还行,但是想用静态生成,就改成了Release模式。结果无论是不是静态生成,程序都跑得有问题。网上好像也有人碰到过这样的问题,看后面回帖也没解决。

png_read_png和png_write_png过不去,Debug的时候用Callstack看到是在fread函数里面调用_lock_file()函数的时候,有写地址冲突。

这让我在哪去找到底是因为什么,但我还是做了最后的挣扎,重新用Release模式去编译生成dll和lib,再去编译我的程序,结果一样。。。

(PS.这里意外发现,我在Debug模式下,使用Release模式编译的dll,也会有问题,-、-)

实在没有办法,只好用2008打开低版本的工程,转换一下(好在没出什么问题),直接用Release模式生成dll和lib。

再用2008创建自己的程序,Release模式和Debug模式都没有问题。

不知道是vs2010优化做得太好,还是代码要求更严格,又或者是libpng库的问题,反正让人非常纠结。如果哪位好心大神知道其所以然,还请留言告知。

一个简单的程序浪费了大量的时间,以后要注意了。

原文地址:https://www.cnblogs.com/lvrcbl/p/3968221.html