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,可能包含原因,大概扫了一眼,貌似会基于原来的环境变量,改变运行是的环境变量
懒得看了,浪费时间
我们来探究下,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,可能包含原因,大概扫了一眼,貌似会基于原来的环境变量,改变运行是的环境变量
懒得看了,浪费时间
相关文章推荐
- Qt之任务栏系统托盘图标
- Qt 4.8.4 & Qt Creator 2.6.1 安装和配置(Windows)
- Qt 关闭窗口时循环依旧运行的解决办法
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
- QT设置窗口模态 进程调用外部程序和入参
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
- Qt textEdit自动翻页功能实现
- qtcreator 程序在xp下出现Failed to load platform plugin “windows”的错误
- Qt — tableWidget插入复选框
- Qt & MySQL
- QTP之CheckProperty Method
- qt 的close和系统的close冲突。close(),close(fd)
- How to install pyqt4 on ubuntu
- Qt Creator 调试器 在 Ubuntu 13.10下 局部变量和表达式(Locals) 无内容
- Qt系统托盘程序
- Qt qDebug方法release时不打印
- (亲测)WIN7+VS2010+QT4.8.1+静态编译 (可以百度网盘下载QT4.8.5 x64编译结果)
- 报表控件NCReport教程:集成NCReport到Qt应用程序中
- QTP笔记--检查点、ChildObjects方法
- QTP学习笔记--Excel数据源