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

转载载请注明出处:CN_Simo.

导语:  

前两章都提到过“静态编译”(Static Compilation),在Windows下一次静态编译差不多需要长达三个小时才能完成,而且还非常容易由于各种原因而出错。那么为什么要花这时间去干这件事情呢!我当初只是想用Qt做一个exe贺卡发给同学,但是通常情况下,我们做出的exe需要各种dll动态链接文件才能正常运行(压缩打包给别人?直接发送一个exe文件都懒得打开,更何况还需要解压呢),那么我就想能不能只需要一个exe就可以呢?

 “静态编译”的作用正是让exe脱离dll的束缚,但是同时你的exe可能比之前要大好几倍(没办法,万物都无绝对完美)。前言说到这里,我们就进入正文来:

文章思路:

  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 修改完之后,我在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

下面所有操作都在本目录中进行。 

输入以下两条命令:

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命令配置编译内容,参数说明:
回车后,看到以下信息代表完成:

开始编译:

mingw32-make

输入命令开始编译,此过程最易出错,因为持续时间长,中间可能遇到很多自己解决不了的问题,此时只能是重新开始。如果过程中未出错的话可能需要3个小时以上才能结束(我的电脑配置见上),你可以去做别的事情了,在编译过程中最好不要用电脑去做其他占用大量系统资源的事情,因为这么做将会大大增加失败的几率。

编译结束:

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

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项目建立、编译、运行和发布过程解析

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链入门

第一课 如何在WINDOWS环境下搭建以太坊开发环境

根据本文指导,可以在WINDOUWS环境下完成以太坊智能合约部署前的比较环境准备。

773
来自专栏我和PYTHON有个约会

莱茨狗-Go语言第二弹:环境搭建

两种环境包,根据需要下载 如果你是windows江湖新手,那么下载msi安装包吧,界面图形化鼠标傻瓜式操作,全程安装辅助基本没有问题!

521
来自专栏散尽浮华

Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)

一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全。为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器)...

3359
来自专栏xingoo, 一个梦想做发明家的程序员

msysGit管理GitHub代码

代码的管理,在日常开发中是很重要的环节,程序员的修炼三部曲——版本控制,单元测试,项目自动化。 本篇就简单的说说通过msysGit来管理GitHub中的代码...

2018
来自专栏张善友的专栏

打造Window Server 2008 R2的工作站

Thinkpad X200 7458 CTO上安装Windows Server 2008 R2,windows Server 2008 R2安装过程非常简单,只...

1848
来自专栏WindCoder

Windows 7下硬盘安装Ubuntu 13.10图文教程

之前一直在虚拟机里玩Linux了,昨天忽然兴起想往真机里装一个,昨天找到的方法,今天折腾了半天终于装好啦。

861
来自专栏FreeBuf

炫酷的渗透系统Parrot Security OS

Parrot Security OS是一款基于Debian渗透测试系统,集成了诸多流行渗透测试工具,并以其漂亮的UI而出名。 部分内置工具 aircrack-n...

2546
来自专栏魏艾斯博客www.vpsss.net

域名所有权怎么验证

域名所有权怎么验证?百度站长工具、谷歌网站管理员工具(Google Webmaster Tools)、百度统计、360 站长工具等这些应用都要先验证域名所有权,...

1192
来自专栏JavaEE

版本管理的倚天剑 --- git前言:一、git简介:二、git的安装:三、git的使用:四、码云的使用:总结:

要想成为武林高手,除了要身怀绝技,还需要神兵利器相配。git绝对称得上是版本管理工具中的倚天剑。正所谓好马配好鞍,相信用上git的你一定能称霸码林,独步天下!

883
来自专栏林德熙的博客

win10 uwp 在 VisualStudio 部署失败,找不到 Windows Phone 可能的原因 手机更新usb 驱动

在我使用 VisualStudio 调试的时候,发现我插入了手机,但是 VisualStudio 在部署的时候找不到手机。 可能的原因是 手机禁用了连接,第二个...

431

扫码关注云+社区