Qt是一个了不起的工程,在html5还没有出来前,一直一次开发,多平台运行的UI开发工具套件。只是由于html5的推出,大量使用场景被侵蚀了。
但由于html5是基于浏览器的开发语言与模型,注定无法开发需要控制硬件的程序。因此,Qt在一些特殊场景下还是有使用空间的。
Qt是基于LGPL与商业授权双协议发布的,其中LGPL规定如果只是调用Qt的dll(linux下是so文件),其商用软件可以不开源,但是如果直接调用Qt的源码静态编译,其商业软件就必须一同开源。因此Qt默认不提供基于源码编译出来的静态库,如果想要生成完全的静态文件,需要自己编译静态库。
其中Qt的5.6.3版本又是一个有着特殊意义的版本,他是官网承认的最后一版支持winxp的Qt版本,之后的版本都是从win7开始支持的。所以小沃就在此分享下Qt5.6.3在windows下编译静态库的方法。
1.下载
Qt5.6.3的官方下载地址为:传送门
2.安装(以mingw为例,下载路径为qt-opensource-windows-x86-mingw492-5.6.3.exe,因为mingw免费,msvc收费,愿意为msvc付费的用户应该也不会用Qt吧)
存在以下注意事项:
(1)在第二步输入Qt账号密码时,如果不想登录,直接拔网线运行即可。
(2)安装组件时下图的几个勾选的一定要勾上,否则以后开发会比较麻烦。
(3)注意安装路径不要有中文
3.修改mingw的连接器配置项为静态编译
也就是修改5.6.3\Src\qtbase\mkspecs\win32-g++\qmake.conf
将QMAKE_LFLAGS=后添加-static作为编译参数
将QMAKE_LFLAGS_DLL=-shared改为-static作为编译参数
4.安装编译需要的工具
根据qt官方编译windows库需要条件(传送门),需要安装Python与ActivePerl,安装完毕后,如果环境变量没有,请手动将这两个软件添加到环境变量中去。
同时请将安装目录下的Tools\mingw492_32\bin添加到环境变量中去。
5.裁剪
将5.6.3\Src中,除了文件夹qtbase的其他文件夹全部删掉(只删除文件夹)或是保留几个需要使用的,比如qtserialport,我们只编译核心功能。可以根据实际需求保留特定的文件夹。
6.运行configure
小沃运行的是如下完整命令configure.bat -prefix G:\Qt\Qt5.6.3\5.6.3\staticlib -release -opensource -confirm-license -static -qt-zlib -qt-libpng -qt-libjpeg -qt-pcre -qt-freetype -no-qml-debug -no-openssl -no-opengl -nomake examples -nomake tests
(1)需要根据自己Qt的实际安装路径修改G:\Qt\Qt5.6.3\5.6.3\staticlib
(2)这个命令只添加了最基础的Qt支持,以下是可选修改
-opengl desktop 替换-no-opengl让其支持opengl库
-qt-zlib 压缩库,提高兼容性,可以去掉
-qt-pcre 正则表达式,提高兼容性,可以去掉
-qt-libpng png格式图片,提高兼容性,可以去掉
-qt-libjpeg jpeg格式图片,提高兼容性,可以去掉
-fontconfig 需要用到字体美化库时添加
7.编译
mingw32-make -j 8
8为cpu核心数,这个数字最好是与cpu核心数一致,可充分利用多核特性。
8.安装
mingw32-make install
9.使用
以后使用需要将G:\Qt\Qt5.6.3\5.6.3\staticlib\bin添加到环境变量中去,然后通过qtcreate开发完毕程序后,整个程序的工程通过命令行运行如下命令即可。
qmake
mingw32-make
最后就会在工程文件下的release下看见编译出的东西了。
注:网上有的说需要先运行qmake -project,这是为了生成qt工程文件。其实如果前期你是通过qtcreate开发的,那么qtcreate已经帮你把工程文件生成好了,这步是可以跳过的。
最后注意一点,本方法编译文件是依赖了Qt源代码的,所以通过本方法生成的文件是需要遵从LGPL协议而向使用者开放源代码的。
文章作者:沃航科技