Qt发布(一) ------ 静态编译解决Qt安装包大小问题
来源:互联网 发布:js得到div高度 编辑:程序博客网 时间:2024/06/06 06:40
Qt在Windows开发中比较重要的一个问题就是,发布的时候会带上一大堆插件+自己的dll,即使是最简单的helloworld发布,至少也得带上QWidget+QtCore,外加Windowsplatform的plugin(Qt4没有platform的插件,但是有QtGui),简单的一个demo就得接近20M。更何况实际工程之中往往会用到一些更占据体积的模块,比如Webkit(这个原生的webkit依赖奇多,因为要增加对qml的支持,所以链接了包括网络+qml+基础QWidget模块在内的所有模块。其实,有些网络模块和qml模块一般是不会用到的,增加了依赖的同时也增加了体积)。
解决这种常规模块(qt5源代码目录下qtbase中的模块,我称之为常规模块,大部分不需要特殊的三方依赖即可编译)的编译大小问题,就是configure的选项调整成了Qt静态编译,然后使用qt静态编译的lib进行编译链接,这样链接出来的可执行文件会比原来使用动态dll的方法总体积小上很多。
整体过程大致如下:
先下载对应的qt-everywhere-opensource包,下载完毕之后使用管理员权限cmd进入源码目录,输入如下:
configure -static -release -desktop opengl -skip qtdoc -skip qtwebkit -nomake examples(这里可以用-debug-and-release,但是debug生成的体积十分大,浪费硬盘而且没啥用,可以不生成, 跳过examples生成步骤会极大的节省编译时间和硬盘占用,examples主要是Qt自带的例子程序,作为开发参考,就和WinAPI和MSDN关系类似,到用的时候再去查就好了)。这里mingw和VS会不太一样,VS需要修改对应版本下的的makespec下面的MD改到MT,MDd改到MTd,这个网上关于VS编译有自己的资料可查。mingw什么都不用改。
然后到在用各自编译环境的命令行重定向到源码目录下,开始编译(一个输入),qt5只编译qtbase的话,还是比较迅速的。各自make,然后qtbase的静态库就会生成在qtbase目录下的lib目录下。然后可以make install,然后就是include+静态lib就可以组成一个开发环境了。就和使用其他第三方库一样使用qt即可。
4.静态编译之后,所有插件静态加载,Windows的platform插件名字是QWindowsIntegrationPlugin,至于各个插件的名字均可以在源代码qtbase/plugins/下对应工程项目文件(.pro)中找到对应的插件名字。 然后使用QT_PLUGIN_IMPORT(插件名字)宏导入
静态编译之后,lib依赖会变多,这个一般看对应缺失符号的类名前缀即可察觉到缺少链接的lib是哪些。
5.静态编译之后,qt5的资源文件rcc加载会出现问题,不能自动生成到exe里面,此时需要用QResource::register(“XXXX.rcc”)来注册对应的资源,才可以使用。这里会出现rcc资源文件独立于exe的问题,可以通过Windows的rc file自定义资源文件系统解决。保证只有一个exe发布,没有其他的dll和多余文件等。
- Qt发布(一) ------ 静态编译解决Qt安装包大小问题
- 安装QT和静态编译QT
- QT安装编译问题
- QT静态编译--qtmultimedia问题
- Qt应用程序的静态编译与发布
- 如何静态编译发布Qt应用程序
- [Qt教程] 第51篇 从Qt 4到Qt 5(一)Qt 5.2安装、程序迁移和发布
- window+qt+mfc 静态编译问题
- Qt静态编译的一些问题
- Qt 5.0.1 静态编译和静态发布(mingw版)
- 一步步学Qt,第五天-Qt程序发布问题 解决
- 解决QT静态编译和debug库问题(mingwm10.dll丢失、collect2:ld returned 1 exit status)
- Qt静态编译及程序图标更改发布
- QT静态编译
- 静态编译QT应用程序
- 浅谈 Qt 静态编译
- 如何静态编译QT
- qt 静态编译
- 关于monkeyrunner录制与回放的实现
- 集群监控管理系统
- 只能在微信浏览器打开的链接,如何查看源码
- 内存是手游的硬伤——Unity游戏Mono内存管理及泄漏
- 用PCOS系统盘安装系统时:提示系统已被非法篡改,系统安装无法继续
- Qt发布(一) ------ 静态编译解决Qt安装包大小问题
- 在ARM Linux上实现4G模块PPP拨号上网
- 关于Android Log类使用的一些反思
- C++ 多态&虚函数表 总结
- Ecilpse自动编译问题
- 页面布局心得
- 未能加载文件或程序集“Microsoft.VisualStudio.Shell" 系统找不到指定的文件
- 矩阵的特征值和特征向量及其物理意义
- IO流_标准输入输出流概述和输出语句的本质