zoukankan      html  css  js  c++  java
  • VS编译的QT程序发布时产生的AppCrash问题

    至少我碰到了三个情况,都是AppCrash错误(以下都指VS2008的Release的设置)

    第1个错误,报错模块是程序自己

    我使用VS2008 Team with SP1和QT4.86编译程序,一直在本机上运行没什么问题,编译出的exe文件在别的机子上运行没问题(https发送有问题,但这是另外一回事)。后来VS2008 TEAM三个月试用期满,于是卸载掉换成ZWT的VS2008 PRO,打上补丁SP1。奇怪的是使用VS2008 PRO编译出来的程序会报AppCrash错误,程序登录界面都无法出来,莫名其妙之余也不想研究了,卸载PRO后重装TEAM,果然这个AppCrash错误消失了。但别的原因造成的AppCrash还在。

    -------------------------------------------------------------------------------------

    第2个错误,报错模块是ntdll.dll。后查明是由于VS2008项目属性没有设置好。

    原来报错的原因是CRT库的错误选择,即Ingore Specific Library填写了msvcmrt.lib,Additional Dependencies 漏写了 libcmt.lib,导致虽然编译链接都通过,但执行有问题(登录没问题,使用外部库上传文件有问题)。 应该如下设置:

    Linker的input页面,Additional Dependencies,应该设置为:
    qtmain.lib QtCore4.lib QtGui4.lib QtXml4.lib QtNetwork4.lib msvcrt.lib (千万注意最后一项,不是msvcmrt.lib)
    Ingore Specific Library应该设置为:
    libcmt.lib (不是msvcrt.lib)

    -------------------------------------------------------------------------------------

    第3个错误,报错模块是程序自己(能出现登录框,但无法登陆,也无法从服务器获得XML应答,点击登录按钮后程序直接AppCrash了),且在安全网络模式下执行也是同样的错误。

    问题签名:
    问题事件名称: APPCRASH
    应用程序名: bak61_AppCrash.exe
    应用程序版本: 0.0.0.0
    应用程序时间戳: 545c9b1b
    故障模块名称: bak61_AppCrash.exe
    故障模块版本: 0.0.0.0
    故障模块时间戳: 545c9b1b
    异常代码: c0000005
    异常偏移: 000151bf
    OS 版本: 6.1.7600.2.0.0.256.1
    区域设置 ID: 2052
    其他信息 1: 0a9e
    其他信息 2: 0a9e372d3b4ad19135b953a78882e789
    其他信息 3: 0a9e
    其他信息 4: 0a9e372d3b4ad19135b953a78882e789

    联机阅读隐私声明:
    http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804

    如果无法获取联机隐私声明,请脱机阅读我们的隐私声明:
    C:Windowssystem32zh-CNerofflps.txt

    最后原因找到了:我去掉登录框的进度条的时候,去掉了new,却照常使用:
    //remember_label = new QProgressBar();
    remember_label->setVisible(true);
    但最奇怪的是,在我本机上(开发机子),无论是VS直接生成运行,还是拷贝到本机别处生成运行,都没有问题,但是拷贝到别的机子上立即歇菜。但是为什么本机没事呢,难道什么地方对内存访问设置的更宽松了(网上搜的答案:软件级别的解决方案是加入DEP例外列表,网上评论一片叫好,可是我的程序被拒绝加入到这个列表)?我的机子装了Delphi 2010/XE/XE5和VS2005/2008/2010/2012。哪位大大知道还请告知。

    -------------------------------------------------------------------------------------

    总结:三个错误,其中2个都是自己对VS设置和相关类库不熟悉造成的,光觉得VS Studio IDE好用,不知道真正做项目时VS的编译器连接器里一堆坑,这还没算C++编译设置,特别是Code Generation的设置,另外还有Character Set对QString和Char*之间的转换有什么影响仍未清楚。第三个错误是自己使用未实例化的变量,当然出错,但是在本机上运行怎么样都不出错,也是百思不得其解。

    备注:三个问题都与qt的dll无关,一开始千小心万小心dll,根本就是走错方向了,奇怪怎么也不见网上的QT前辈讲讲我碰到的那些问题?

  • 相关阅读:
    学习淘宝指数有感
    STL学习小结
    Java里泛型有什么作用
    android 内存泄漏分析技巧
    学道1.3
    严苛模式(StrictMode)
    年龄大了还能够学习编程吗
    ORACLE EXP命令
    数学之路-python计算实战(13)-机器视觉-图像增强
    《C语言编写 学生成绩管理系统》
  • 原文地址:https://www.cnblogs.com/findumars/p/4081976.html
Copyright © 2011-2022 走看看