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:\Windows\system32\zh-CN\erofflps.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前辈讲讲我碰到的那些问题?
VS编译的QT程序发布时产生的AppCrash问题的更多相关文章
- 解决Qt程序发布时中文乱码问题(通过QApplication.addLibraryPath加载QTextCodec插件)
Qt程序的文字编码,是通过插件来解决的,所以我们发布的时候需要把相应的插件也发布出去,在开发者电脑上程序会自动从插件目录加载到插件,但是如果发布给别的电脑使用,需要手动指定插件路径,如下所示: int ...
- VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...
- 亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...
- qt 程序发布
Qt 程序发布步骤: 注意5.5 以后不再支持 WinXP 1) dll 抽取工具 windeployqt.exe 2) Windows脚本 实例: D:\Qt\Qt5.5.0\5.5\mingw49 ...
- 基于vs2005以上版本Qt程序发布的注意事项(讲了manifest的问题)
最近发现了一个非常恼人的程序deployment的问题,估计大家有可能也会遇到,特此memo. 问题的出现我觉得主要还是微软搞的花头太多, 一个不知所谓的manifest文件让本来简单的程序发布变得困 ...
- .Net Core应用程序发布时不同方式的差别
.Net Core的文档更新的真是快..每次看的时候都觉得之前是不是梦游看的...每次发布应用程序的时候都要翻看下文档..至少rid是死活记不住.还是留个RID的索引吧..还有发布的索引 ,这样就好复 ...
- Qt 程序发布以及打包成exe安装包
一.简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno ...
- 使用VSCode 编译调试QT程序
预备知识 bat文件,或者其他的脚本语法. qmake基本语法,qmake shadow build是啥. vscode 的task,lanch的配置. 前提 各个程序正确安装,即使用QtCreato ...
- Mac中QT程序发布
基于Qt开发的应用程序进驻Mac App Store 最近摸索着将一个基于用Qt开发的App发布到Mac App Store,在网上查找相关资料的时候,发现很多文档都过期了,要有一些修改,所以想记录下 ...
随机推荐
- label swift
var label = UILabel(frame: CGRectMake(10, 20, 300, 100)) label.text = "<Swift语言实战入门>" ...
- [网络配置相关]——ifconfig命令、ip命令、route命令
ifconfig命令 1. 查看已被激活的网卡的详细信息 # ifconfig eth0 Link encap:Ethernet HWaddr 00:30:67:F2:10:CF inet addr: ...
- nodejs笔记二--文件I/O;
一.写入文件: fs.writeFile(filename, data, callback),数据参数可以是string或者是Buffer,编码格式参数可选,默认为"utf8",回 ...
- unity 协同
void Update () { if(Input .GetKeyDown (KeyCode .W )) { StartCoroutine ("Test"); } } IEnume ...
- AJAX三种返回值方式
(一)TEXT方式 该方式返回的是拼接字符串,想要取到其中的值,需要先将返回值进行拆分 (二)JSON方式 该方式返回的是数组,想要取到其中的值,可用索引项进行提取 (三)XML方式 XML:可扩展标 ...
- How to find and fix Bash Shell-shock vulnerability CVE-2014-6271 in unix like system
type command - env x='() { :;}; echo vulnerable' bash -c 'echo hello' in your terminal. if your sy ...
- XStream使用详解
1.Xstream介绍 (1)Xstream介绍 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需 ...
- shell编程之重定向
标准输入,输出和错误---------------------------------文件文件 描述符---------------------------------输 ...
- hdu 1075 What Are You Talking About
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075 题意:比较简单,易懂,这里不做说明. 解法:第一种方法:用map映射,耗时1000+ms:第二种 ...
- 【BZOJ】【2002】【HNOI2010】弹飞绵羊
呃这题的Hint写着splay启发式合并……但是蒟蒻不懂T_T只好写个简单的LCT来蒙混过关,就是时间效率上差劲的很…… 不过能够一次AC心情也是蛮愉悦的~ /******************** ...