前面一直用默认的环境(动态方式)编写程序,生成的执行文件要和若干dll文件一起才能工作,今天捣鼓了一下,额外配置了静态环境,记录备忘,在Win XP3平台上。
最终的结果是,程序可以只生成一个exe文件,在其它未安装QT的机器上正常运行,限于环境,跨平台没试。
准备阶段
注意留有足够的安装空间,相当于装了两个编译环境,1个默认动态的,1个静态的,工程中可以选择使用,各有各的优点,大概2--3G左右:
1. 已经安装的QT5.3.1保持不动,所有文件路径:D:\Qt\Qt5.3.1目录下
2. 配置环境变量,以备编译用
include = D:\Qt\Qt5.3.1\Tools\mingw482_32\i686-w64-mingw32\include
lib = D:\Qt\Qt5.3.1\Tools\mingw482_32\i686-w64-mingw32\lib
3. 下载静态库,目前官网可用的版本: http://download.qt-project.org/official_releases/qt/5.3/5.3.1/single/qt-everywhere-opensource-src-5.3.1.zip
解压到一个目录下,比如D:\downloads下
配置阶段
1. 建一个放静态QT版本的文件夹,我是和原先(D:\Qt\Qt5.3.1)放在共同的QT目录下,目录是D:\Qt\Qt5.3.1_Static
2. 从DOS命令行(开始--运行--输入cmd,回车进入DOS命令行)进入所解压的文件目录下,里面有config文件。
执行:configure-confirm-license -opensource -prefix "D:\Qt\Qt5.3.1_Static"-debug-and-release -static -platform win32-g++ -opengl desktop -no-angle-nomake examples -nomake tests -skip qtwebkit
如果你输入正确,就会看到屏幕不断滚动输出内容,一段时间后配置完成,我的机器慢,跑了十几分钟
3. 执行mingw32-make, 同样,如果你输入正确,就会看到屏幕不断滚动输出内容,一段时间后配置完成,我的跑了3个多小时,后面出现了一个python错误的提示,被我强关了。
4. 执行mingw32-make install, 大概1个多小时,到后面的停在一个cpp文件上,一直半个小时不动,被我强关掉。
这个过程,我是用一个bat文件搞定的,在命令行上输入那么长的字符很麻烦,在d盘根目录上建一个文本文件,输入下面:
cd D:\downloads\qt-everywhere-opensource-src-5.3.1
configure-confirm-license -opensource -prefix "D:\Qt\Qt5.3.1_Static"-debug-and-release -static -platform win32-g++ -opengl desktop -no-angle-nomake examples -nomake tests -skip qtwebkit
然后存为static.bat,回到桌面,按Win键和R键,弹出运行对话框,输入cmd,回车,输入d:,进入d盘根目录,输入static.bat回车,然后看见屏幕滚动,你就可以去做你爱做的事了,然后就是等结束后继续输入mingw32-make,等结束后输入mingw32-make install
整个过程差不多3-4小时,看机器配置了。
解释下:D:\downloads\qt-everywhere-opensource-src-5.3.1为解压后的静态库源文件目录,D:\Qt\Qt5.3.1_Static为要把静态库按安装到的目录
测试阶段:
1. 打开QT, 工具-----选项-----构建和运行,找到Qt Versions,手动添加,找到静态版本目录里面的qmake.exe,起个名字Qt_5.3.1_static,在构建套件里添加,Qt版本选刚才建的Qt_5.3.1_static, 调试器用非none的那个,编译器用Mingw4.8.232 bit, 起个名称。设为默认。
2. 新建一个程序,运行测试,静态的比较慢,而且debug版的exe文件超大,我建的一个空白QDialog,debug后200多M,release版10M,然后用aspack压了下,4M多,在其他机器上,运行OK
3. 中间运行可能会出现 未定义的QApplication等错误,可以查看下程序目录下的make文件,应是找不到模块文件,注意在pro文件里将QT +=。。。相应的模块写正确,将环境变量include和lib改为静态库下面的相应目录上,增加一个path变量,我的
include=D:\Qt\Qt5.3.1_Static\include
lib=D:\Qt\Qt5.3.1_Static\lib
path = D:\Qt\Qt5.3.1_Static\bin;D:\Qt\Qt5.3.1\Tools\mingw482_32\bin
编译通过。
博客自带的编辑器不是很好用,打字半天,终于完成,有错别字见谅,不必较真,明白意思即可。