您的位置:首页 > 编程语言 > Qt开发

QtCreate运行程序和直接双击运行程序的区别!

2013-12-06 16:49 218 查看
Qt编程时有时会遇见,有时直接点击可以运行,而在QtCreate里运行却异常退出的情况(或者相反)?

我们来探究下,QtCreate里点击运行,和直接双击程序运行的区别?


为啥有区别?

父进程不同(所以继承的环境变量不同)

直接双击,继承的是系统的PATH变量(不知道win下有没有shell这玩意,就这么理解吧)

在QtCreate点击运行,程序的父进程是QtCreate

QtCreate启动时会继承系统的PATH环境变量,所以在你启动QtCreate后,去添加的系统环境变量,对当前已打开的QtCreate是无效的

所以此时在其中启动程序是找不到库的,也就运行不了,而直接双击程序却是可以运行的

出现原因:在我QtCreate打开后,我去配置了OpenCV的库,出现直接可以运行,QtCreate中异常退出

解决方法:重启QtCreate就行了

如果如上所说,同时使用mingw和vs 的Qt库的同学肯定有疑问了?

因为这两个库编译的程序,是不能兼容对方的库的,如果说QtCreate继承的系统PATH的话

为什么我QtCreate中可以运行,而有时直接双击库函数定位不正确呢?

为什么我在QtCreate中切换发布版本,使用不同编译器时,点击运行,程序都能正常启动的?

原因:

在切换不同发布版本时,Qt的系统环境变量就切换了(例如QT_DIR, QT_INSTALL_LIBS 和 QT_INSTALL_BINS)

同时QtCreate会根据自身的环境变量情况,在自己的PATH最前面加上相应编译器相关的Qt库路径(注意这个最前面)

由于在QtCreate中运行程序,继承的是QtCreate的PATH,而其又在最前面加了相应编译器的Qt库,所以

首先找的肯定是那个Qt库,所以就肯定可以运行

而直接双击运行,就要看你系统PATH配置的是那个编译器的Qt库了

尝试打印这个程序的环境变量

mingw

PATH发现在比系统的PATH环境变量多了(是加到最前面的,可见其心机)

D:\QtSDK\mingw\bin;D:\QtSDK\Desktop\Qt\4.8.0\mingw\lib;D:\QtSDK\Desktop\Qt\4.8.0\mingw\bin;

vs2010

PATH前多了

D:\QtSDK\Desktop\Qt\4.8.0\msvc2010\lib;D:\QtSDK\Desktop\Qt\4.8.0\msvc2010\bin;

还有些其他的

具体原因

源码Qt4RunConfiguration.cpp,可能包含原因,大概扫了一眼,貌似会基于原来的环境变量,改变运行是的环境变量

懒得看了,浪费时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: