QT之qt4.8.6在windows下的静态编译
参考链接:
链接1 - 理解静态编译的过程:
win7 32位下 QT4.8.6从安装配置到静态编译
http://www.tuicool.com/articles/iu6Zfu3
链接2 - 静态编译的过程参考(1):
http://blog.****.net/zy812248258/article/details/52593247
链接3 - 静态编译的过程参考(2):
完整的windows下搭建Qt开发环境QT4.8+qt creator2.8.0
http://www.unjeep.com/q/690041614.htm
链接4 - 静态编译的过程参考(3):
Qt4.8.6静态编译
http://www.docin.com/p-1219601328.html
目的:在windows下,qt程序可以拿到别的机子上运行;
分析:QT默认的编译方式是动态编译,即运行程序需要依赖QT动态链接库中的dll文件,如果想在别的电脑上运行你的程序,就需要把这些dll文件一起放到exe下一起带走,但是QT有几个动态链接库太大了一个就要上百兆,如果你的程序中需要用到这些dll文件中的东西,就需要一起带走,这样的话你做一个很小的程序最后需要运行的话足足要几百兆的空间,很是浪费。还好QT提供了静态编译,就是编译后把你程序中需要用到的东西从dll动态链接库中提取出来,这样的话使得生成的exe可执行文件不再依赖于QT的动态链接库,自然程序最后会小很多。
前期工作:
1.进入:C:\Qt\4.8.6_MinGw\mkspecs\win32-g++\qmake.conf,
将该文件的63行替换为QMAKE_LFLAGS = -static
将该文件的70行替换为QMAKE_LFLAGS_DLL = -static
2.将:C:\Qt\4.8.6_MinGw目录下的mkspecs拷贝到目录:D:\study\Qt_4.8.6_static_lib下;接着打开开始菜单中的 Qt 4.8.6 Command Prompt;
输入命令:
configure -debug-and-release -platform win32-g++ -static -opensource -prefix D:\study\Qt_4.8.6_static_lib -nomake examples -nomake demos -no-exceptions -no-stl -no-rtti -no-qt3support -no-scripttools -no-openssl -no-opengl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite
成功会提示输入是否接受许可证,输入“y”,就开始配置了;
注意:
a.这里最好直接从浏览器复制到cmd中,不要从文档里复制过去!
b.参数分析:
-debug-and-release:表示能支持生成debug和release版本,可以自由选择;
-prefix D:\study\Qt_4.8.6_static_lib:表示编译,安装后的库等文件会在该目录生成;
-platform win32-g++:表示用的编译器;
PS:另可以加入参数:-fast快速编译;(未测试)
c.如果配置有误,运行mingw32-make confclean对错误的配置进行清除,并重新开始配置;
PS:出现过的错误及解决方式:
分析:提示在D:\study\Qt_4.8.6_static_lib目录下没有编译器;
解决:进入qmake子目录,执行make clean;接着将:C:\Qt\4.8.6_MinGw目录下的mkspecs拷贝到目录:D:\study\Qt_4.8.6_static_lib下,即可解决;
3.运行mingw32-make开始进行编译。最少准备四个小时(建议:晚上编译);
编译之后运行mingw32-make install 将编译好的Qt库安装到-prefix
D:\study\Qt_4.8.6_static_lib所指定的目录下,完成!
4.进入qtcreator,设置静态编译:
a.进入:project -> Kits -> Add ->设置Name:Qt_4.8.6_static;
b.点击:Qt Versions -> Add ->设置qmake location为静态编译目标目录下的qmake,即:D:\study\Qt_4.8.6_static_lib\bin\qmake.exe,点击Apply;
c.点击kits ->如下图设置:
点击:Apply即可;
5.按照之前的helloworld工程,继续在qtcreator中:设置编译为release - qmake - make -run;发现在helloworld工程下又多了一个子目录,为
build-helloworld-Qt_4_8_6_static_lib-Rele ase - 进入release目录,发现有helloworld.exe,这个就是可以用来发布的可执行程序;
6.拷贝helloworld.exe到别人的电脑,直接执行,成功!哈哈,接下来就可以制作windows的程序了!过几天先搞个小游戏先!
PS:现在用release方法编译你的工程,这样静态编译以后只是不再依赖QT的动态链接库,但是你要用到C++或者C的东西的话还是要依赖相应的C或者C++ dll文件,把生成的release文件夹移到其他电脑上运行,如果提示缺少某些dll,就到编译器MingW下的bin里面找到需要的DLL文件,复制到文件夹目录下,相比QT的dll文件小很多了,一般都是几百k,这样的话你的程序就能在任意电脑上运行了。
最重要的是,以后生成的QT程序都可以通过静态编译的方法,不再依赖QT的动态链接库,方便多了。
附:用UPX压缩该可执行程序helloworld.exe:
从链接下载工具upx,upx下载链接:http://www.xiazaiba.com/html/1634.html
将该工具拷贝到:D:\study
设置环境变量:
打开开始菜单 - 输入cmd -进入qt应用程序目录-输入命令:upx helloworld.exe,如下图:
qt程序由9M压缩成了3M,效果很明显;
关于UPX的知识,可见:http://news.mydrivers.com/1/162/162823.htm