拿来主义——QT静态编译配置

0.写在前面

QT的动态链接编译着实是有点坑,最近我遇到了在win7_32环境下编译后在win10_64不能运行的问题,反过来在win10下使用32位mingw编译后却可以在win7运行,当真是无语至极,迫不得已尝试静态编译,那么废话不多说,接下来介绍如何最快地配置QT静态编译环境,测试版本QTcreater5.10.1+Qt5.12.1 MinGW。理论上其他版本是一个方法。

1.下载原版QT

首先的首先自然要有一个原版QT环境,这个教程很多了,我就不多说,请自行下载安装,注意如果想要保住程序通用性的话,建议在win7_32位下使用32位的QT库。最新版本的QT好像不自带32位mingw了,不过没关系,我们不用他原来的。

2.开始“拿来”——下载别人编译好的

网上有些教程讲静态编译是展示如何自行编译qt源码,这种方法一则流程繁复命令冗长容易出错,二则编译QT源码实在耗时太长,有兴趣的可以自己尝试。我们在这里使用别人编译好的来用,从而省去了最为耗时的一步。感谢各路大神的劳动成果。

2.1检查自己的QT路径

如果你已经安装好了QT并且在安装的时候选择了配套安装mingw的话,那么此时你应当有这样一个路径:
拿来主义——QT静态编译配置
其中我这里的Qt5即为安装根目录。

2.2下载已经编译好的QT

自行在网络上寻找QT静态编译版本,比如说我的静态编译版本便来自QTCN开发网
拿来主义——QT静态编译配置
下载下来后一般最少有两个文件夹,带其他如mysql支持和openssl的可能有其他文件夹。
拿来主义——QT静态编译配置
其中mingw开头的文件夹和原版的作用雷同,Qt开头static结尾的文件夹就是我们主要需要的。
将他们解压。

2.2安装与配置

安装很简单,将解压后得到的至少两个文件夹复制到原版QT的目录下,复制后如下:
拿来主义——QT静态编译配置
复制完后还要进行配置,不然直接在creator里添加路径会报错。

2.2.1复制qt.conf文件

在原动态库下的bin/文件夹中找到qt.conf文件,将它复制到静态库下的bin/文件中,这样来让qt“识别”你这个另外加进来的库。

2.2.2编辑qmake.conf文件

在根目录\5.10.1\mingw73_32_release_static\mkspecs\win32-g++下找到这个文件,找到 QMAKE_LFLAGS_DLL
将后面都改成 -static
再加一行 QMAKE_LFLAGS
后面也改成 -static
在新版本QT中没有这些属性,他们都在另一个文件中,被"include"了进来,如果找不到请根据具体路径找到文件进行编辑,一般编译好放出来下载的qt静态库这里都是改好的。
改完后文件内容如下:
拿来主义——QT静态编译配置

2.2.3复制qmlscene.exe

在原动态库bin文件夹下复制这个文件到静态库bin文件夹下,否则creator会报qmlscene未安装。

2.2.4复制Qt5Core.dll

在原动态库bin文件夹下复制该文件到静态库lib文件夹下,否则报缺失错误。
该步存疑,我在安装的时候没有复制该文件也编译成功了,网上其他讲本机编译源码的教程有说要复制这个,可能是旧版本的原因。

3.在creator中选取已经配置好的库

打开creator,点击菜单栏工具>选项>kits,或者选项里面的“构建与运行”,如下:
拿来主义——QT静态编译配置
在该窗口上如下操作:
拿来主义——QT静态编译配置
拿来主义——QT静态编译配置
如果此前配置步骤做的正确的话,到这里就可以正确导入库,但是还差一步,使用他人编译好的静态库,最好将编译器和调试器设置为配套的mingw,就是我们一直没有使用的另一个不带static的文件夹,如果没有设置的话,在编译过程中可能会报错。添加两器就不多说了,编译器为g++,调试器为gdb,在bin文件夹下找到添加就行。

3.大功告成

到这里,静态库就算安装完成了,接下来就可以使用这个套件进行编译,注意使用该配置的套件只能进行release编译,debug会报错,而且和原动态库不能混用,也可能是我两个mingw版本有差别的原因,我还是建议将静态编译只作为最后一步在虚拟机里面编译一下就好,平常的编码使用动态库进行debug和release。