QT 编译通过但是运行出现程序异常结束或者crashed的问题 在QT creator中最佳解决办法

版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,联系作者 https://blog.csdn.net/yellow_hill/article/details/78661963

1 问题描述

重装了系统,然后,下了最新的qt的环境,然后尝试跑最基本的qt自带的实例,发现错误。已经数次遇到这种情况了。

用了网上的一些方法,发现总是只能解决一次问题,换了一个系统或者版本编译器,结果又要重新搞一遍,好烦啊,

没有个一劳永逸的方法了吗?不服啊,今天研究了一下。


1.1 环境如下:

A WIN7 64位

B QT Creator

Qt Creator 4.5.0-rc1 (4.4.83)
Based on Qt 5.10.0 (MSVC 2015, 32 bit)

Built on Nov 21 2017 13:40:46

From revision 59e3d9af1e

Copyright 2008-2017 The Qt Company Ltd. All rights reserved.

The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.

C QT的安装版

QT 5.9.3 QT5.6.3 这两个安装版本


1.2 出现错误的环境配置如下:









1.3 主要怀疑的问题点:

a 没有安装Visual station 版本,

主要怀疑有一些QT的编译器依赖于VS,这一题,其实可以PASS,因为QT也自带了编译器。
那么,还有一个可能就是,操作系统和编译器的兼容性问题。

因为WIN7我装的是64位的,那么好了,QT自带的MigGW是32位的会不会有问题呢?

重大嫌疑?
我于是去网上找单独的MigGW的编译器,遗憾的告诉大家,这个编译器居然只有32位版本的。
网上,查到,大家都提到,其实32位编译器编译的程序在WIN7 64位上是可以使用的,这样就搞的有点疑惑想要试验一下。

b 动态库的路径不对

c 程序连接的库路径不对

这个问题的确认 ,通过编译QT自带的程序可以来验证,所以这一条PASS

d 编译器不匹配

这个问题QT creator有清除的功能,我们编译器前先清除之前的东西,所以,这一题PASS.

e 不同版本的库,不匹配

由于我下载了两个QT的编译器(兼容性考虑)那么很有可能,会出现编译器的选择的库的版本不兼容的问题。

2 解决的方法尝试和步骤

根据上面1.3的分析,主要针对可能的问题 1.3.a 、1.3.d和 1.3.b来进行评判。

2.1 尝试安装VS2015,来移除64位操作系统的影响(尝试解决1.3.a的问题)

微软的 VS2015在社区的集合版本里面其实已经可免费下载了,所以,没有问题,我们可以先尝试一下VS2015,这样,也许环境问题就可以解决了。

https://www.visualstudio.com/zh-hans/downloads/?rr=http%3A%2F%2Fblog.csdn.net%2Fliang19890820%2Farticle%2Fdetails%2F53931813



2.2 尝试直接从生成的可执行文件执行获取应用实际的错误信息(尝试解决1.3.b的问题)





通过在操作系统的陆经理吗增加QT路径可以找到Qt5Core.dll的丢失问题。


我增加的路径如下:

D:\QT\Tools\QtCreator\bin


但是,还是有如下报错继续出现:



这时候只能是把Qt5Core.dll拷贝到windows/system32下面去了

然后,重新启动机器,发现这个问题最终解决了。但是,当我换了其他一个项目的时候,我发现,这种copy到windows的目录的方法就不好了,

因为,新的项目程序,依然要有同样的动态库找不到的问题,同样运行后,出现库的不匹配问题。


2.3 如何彻底解决库的丢失问题?(尝试解决1.3.d的问题)

之前的路径设定都是可以解决某一次的库问题,但是,对于有些苦,不同QT其实有不同的版本。

这时候,就需要设定路径的时候,依据项目考虑优先选择库的版本。
那么,如何选择库的优先版本呢?



其实,我们不一定非要去设置系统的环境变量, 我们知道QT creator其实有项目设定的
如上图,
在QT creator的项目设定栏目里面,有构建环境的相关设定,其中就包括,PATH,
这个PATH显然是优先级高于系统的环境变量的设定的,

然后,我们需要注意把本项目用的编译器的路径放到最前面,这样,系统会先找这个路径相对库,编译生成新的需要的库文件等。


没有更多推荐了,返回首页