Qt入门之基础篇(三):掌握Qt4的静态编译基本方法

转载载请注明出处:CN_Simo.html

导语:  

        前两章都提到过“静态编译”(Static Compilation),在Windows下一次静态编译差很少须要长达三个小时才能完成,并且还很是容易因为各类缘由而出错。那么为何要花这时间去干这件事情呢!我当初只是想用Qt作一个exe贺卡发给同窗,可是一般状况下,咱们作出的exe须要各类dll动态连接文件才能正常运行(压缩打包给别人?直接发送一个exe文件都懒得打开,更况且还须要解压呢),那么我就想能不能只须要一个exe就能够呢?
      “静态编译”的做用正是让exe脱离dll的束缚,可是同时你的exe可能比以前要大好几倍(没办法,万物都无绝对完美)。前言说到这里,咱们就进入正文来:bash

文章思路:

  1. 准备编译所需环境及文件;
  2. 编译Qt4.8.6源码;(此过程或许要花掉你一上午的时间,要有良好的心理素质哦!
  3. 配置Qt静态库到Qt Creator;
  4. 静态模式从新编译Hello World程序;
  5. 找到exe程序与以前版本进行大小对比;
  6. 总结说明。

 


 

Let‘s start:

编译准备:

所需环境:

配置固然是越好越快了,个人配置编译了一上午。工具

所需文件:

前期工做:

 

步骤一:配置编译文件qmake.conf

我将zip解压到E盘,qmake.conf文件就在源码目录\mkspecs\win32-g++中,用记事本打开修改下列参数:QMAKE_LFLAGSQMAKE_LFLAGS_DLL。参数值为 -static,以下图:
static_1
修改完以后,我在E盘新建一个“qt4.8.6_static”文件夹做为编译输出目录,而且须要将更改后的“mkspecs”文件夹复制到qt4.8.6_static文件夹中。若不作此操做步骤三可能会报错,相似下面这样学习

Could not find mkspecs for your QMAKESPEC(win32-g++) after trying:
E:/qt/qt4.8.6_static\mkspecs

步骤二:设置环境变量以及所需编译内容 

开始菜单中打开Qt命令窗口,cd命令进入源码目录:测试

e:&cd e:\qt-everywhere-opensource-src-4.8.6

下面全部操做都在本目录中进行。 spa

输入如下两条命令:debug

 

set QMAKESPEC=win32-g++
configure -confirm-license -opensource -prefix “F:\Qt\Qt_4.8.6_static” -debug-and-release -static -platform win32-g++ -nomake demos -nomake examples -nomake tests -fast -mp

 

  • set命令设置环境变量(注意:窗口关闭将清空设置,需从新设置
  • configure命令配置编译内容,参数说明:

参数说明
回车后,看到如下信息表明完成:
orm

开始编译:

mingw32-make

输入命令开始编译,此过程最易出错,由于持续时间长,中间可能遇到不少本身解决不了的问题,此时只能是从新开始。若是过程当中未出错的话可能须要3个小时以上才能结束(个人电脑配置见上),你能够去作别的事情了,在编译过程当中最好不要用电脑去作其余占用大量系统资源的事情,由于这么作将会大大增长失败的概率。htm

编译结束:

 结束以后,输入下面命令开始一大堆的复制命令,这时你能够看到qt4.8.6_static目录已经开始急剧膨胀了。blog

mingw32-make install

大概15分钟便可复制完毕。
注意若是移动或者改名qt4.8.6_static目录,将致使bin目录中的程序异常,下面操做可解决此问题:
在bin目录下建立一个qt.conf文件,内容这么写:

[paths]
Prefix = ..

如此,即可进行移动或改名操做了。

配置Qt Creator:

 打开qt creator,【工具】-【选项】-【构建和运行】,在里面添加刚编译出的qt4.8.6静态版本(qmake路径选择bin目录中的qmake.exe哦),以后添加新的构建套件,qt版本选择qt4.8.6,名称随意,以下图:

Hello World测试:

 【新建】一个project,构建套件选择刚刚添加的。在这里,我续用教程二中的helloworld项目测试一下。
打开helloworld项目后,crlt+5将新的构建套件添加上去,点击左下角【部署构建套件】按钮分别选择原有Kit和静态版Kit的release版本运行项目,几秒钟后便可看到helloworld运行界面:

exe文件对比:

寻找exe生成目录,找到两个exe文件,惊奇的发现了这个结果:

(右面是由咱们的qt静态库编译生成的程序,左面则是原来的)

结果显示:

  • 一样是release版本的,所产生的helloworld程序大小彻底不在一个等级(一个KB级别,一个MB级别),静态编译败
  • 动态编译出的exe文件想要打开须要dll动态连接文件的支持,静态连接编译出的exe文件则能够直接打开,再也不须要dll文件的束缚,静态编译胜

 


 

总结说明:

  经过上面结果能够看出:动态编译和静态编译都有各自优缺点,咱们应该适当选择本身所需;
qt源码编译的过层拖得越长越是容易出错误,选择一台配置好点的电脑能够适当增长编译速度;
经过本章知识,咱们的心里或许会嫌麻烦又或许会以为颇有趣,若是你是后者但愿之后的学习你可以愈来愈出色。
让咱们一块儿期待下期内容吧[@CN_Simo]!

结束语:      

上一篇:Qt入门之基础篇(二):Qt项目创建、编译、运行和发布过程解析

相关文章
相关标签/搜索