Luna's blog 月亮月亮酱

Qt静态编译与压缩加壳

2018-08-16
Qt

需要准备的工具

  • Qt静态编译包
  • exe加壳工具
  • Qt Creator

用过Qt的人都知道,由于Qt包含的库很多,所以编译出来的软件非常大而且关联了很多的动态库,直接用debug或者release编译出来的文件是无法脱离Qt运行的,会报如下错误。

Qt 官方开发环境里自带了一个工具:windeployqt.exe 可以将所有所需的库文件整合我们的程序可以在其它的电脑上也能运行,我尝试了这种方法后发现并不理想,因为编译出来的文件非常大,而且也不是单独的exe文件,拿我的项目flappy bird说,编译出来就有50多m了。

那么有没有什么好方法能够简单地打包自己的exe文件呢,答案就是通过静态编译。

首先需要准备对应自己Qt版本的静态编译包,网上一般有人上传自己编译好了的静态编译包,就不需要浪费自己宝贵的几个小时人生去制作了,制作方法在此不做赘述,我们主要来看下怎么使用。

Qt静态编译

  1. 将下载好和自己Qt版本的静态编译包
  2. 在工具>选项>kits>Qt Virsions中添加静态编译包的配置路径。 如果出现 Qt没有正确安装,请运行make install 的error,则需要在静态编译包的qmake.exe同目录下新建一个qt.conf文件,写上:

     [paths]
     Prefix = the path of static package
    

    如:

     [paths]
     Prefix = G:/Qt5.3/5.3.2-static
    

    如果提示 qmlscene未安装 ,只需要把原来Qt的bin目录下的qmlscene.exe复制到静态包的bin目录就行了。

  3. 在kit下新建一个配置,Qt Verson选刚刚添加的静态包,编译器选原来的就行,添加完成后在项目中添加静态编译包的release设置,最后构建项目即可。

  4. 编译出来可以看到exe文件大小约15m,而且不受动态库的限制啦。

加壳压缩

15m还是有点大,接下来再用工具对exe文件进行压缩,尝试了几个加壳工具后发现有的工具加壳完会导致程序崩溃的情况,在此推荐使用upx工具,Github链接戳这里⇒

下载完成后只需要将要压缩的exe文件放在upx.exe的同目录下,然后将其拖到upx.exe上打开即可,是不是特别简单呢。

压缩完成后得到的exe文件只有约5m大小,而且运行正常,这样就可以很方便的把自己的程序传到其他的电脑上啦。


Content