• [心得]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库的问题,反正让人非常纠结。如果哪位好心大神知道其所以然,还请留言告知。

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

  • 相关阅读:
    Eclipse 配置黑色主题
    [转发] win8安装mindget mindmanger
    2013.9小记
    【转发】Eclipse报错:Referenced classpath provider does not exist
    NoSql数据库初探-mongoDB读操作
    配置mongoDB服务
    NoSql数据库初探-mongoDB环境搭建
    pdf2htmlEx安装及测试
    关于ubuntu16无线网卡RTL8723BE频繁掉线及信号不足的解决办法
    一个简单的消息提示jquery插件
  • 原文地址:https://www.cnblogs.com/lvrcbl/p/3968221.html
Copyright © 2020-2023  润新知