Qt最新版5.12.2在Win10环境静态编译安装和部署的完整过程(VS2017)
一、为什么要静态编译
用QtCreator编译程序时,使用的是动态编译。编译好的程序在运行时需要另外加上相应的Qt库文件,一大堆dll文件。如果想将生成的程序连同所需要的库一起完整地打包成一个可执行程序,那就需要使用静态编译。Qt官方不提供静态编译好的安装包,所以需要我们在自己的电脑上静态编译。而且exe文件会比动态编译的要小上很多。
二、源码下载

打开网址选择一般选择最新的版本,根据QT官方Qt5.12这一版有长期的技术支持,大约5年的样子稳定性相对来说比较高,所以建议选择这个版本的源码来编译。 我编译的时候才是Qt5.12.2,MD我前天刚编译好今天就跟新到Qt5.12.3。伤不起啊。
三、安装编译工具
安装的编译工具有:
一般来说下载这三个工具就可以,记得要设置环境变量,当然你要编译MSVC版的安装Visual Studio2017,并且安装它。
四、编译环境选择
这次我选择编译x86的静态库,原因很简单。64位的系统可以运行32位的程序,但是反之则不可以,所以选择编译环境位x86

五、编译参数配置
打开源码所在位置( qtbase\mkspecs\common\msvc-desktop.conf )找到如图所示位置文件并修改保存:

六、开始编译
- 先打开命令工具提示切换到源码所在位置

- 切换完成之后输入如下命令(建议复制粘贴):
configure.bat -static -prefix "D:\Qt\msvc2017_static" -confirm-license -opensource -debug-and-release -platform win32-msvc -nomake examples -nomake tests -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp
configure.bat
-static //指明是静态编译
-prefix "D:\Qt\msvc2017_static" //指明安装的目录
-confirm-license -opensource //指明是开源版本的qt
-debug-and-release //指明需要debug版和release版,可以单独选择release版
-platform win32-msvc //指明使用msvc编译
-nomake examples -nomake tests //不编译样例
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg //可选插件
-opengl desktop
-mp //多核编译
make
在命令提示工具输入:
nmake
此时源码开始编译,编译时长根据电脑的配置而异,我的电脑I7 7500U Inter240GSSD,大约从早上上班9点种开始编译,在下午6点钟下班的时候没有编译完,等第二天早上上班之后发现已经编译完了,具体多长时间也不知道。乐观12+小时以上。nmake install
安装完成之后在命令提示工具输入:
nmake install
此时编译号的源码开始安装,这个安装时长大概2个小时左右吧。安装完成之后就可以使用了。
七、开始使用
源码编译安装完成之后,需要安装Qt Creator工具来使用我们刚刚编译好的静态QT。首先下载 [QtCreator](http://download.qt.io/official_releases/qtcreator/)
依然选择最新版下载并安装。安装完成之后打开开发工具我们需要配置一下才能使用。


** 注意事项:在里一定要天写“win32-msvs”。否则编译器会报编译目标类型错误 **
配置完以上内容就可以开始放心的编译自己的程序。测试了一下空白程序在release模式下大概11M左右,还是蛮大的吧,优势就是不必担心丢失DLL文件而报错了。
八、注意事项
在添加Qt Versions时可能会报“qmlscene 未安装”,出现黄色感叹号。这是你只需将安装Qt官方动态编译的安装包拷贝相应目录里面的“qmlscene.exe”到我们刚刚编译安装的目录下重新添加就ok了。
当你下载别人编译好的静态库或者把自己编译的库移动了一个位置时Qt Versions 位提示错误“qt未正确安装,请使用make install进行安装”。不要怕其实不用重新编译安装的,只需在目录下新建一个文本文档“qt.txt”,然后输入
[Paths]
Prefix=D:/qt/static
** 注意:输入完之后保存时选择“ANSI”,另存为的时候有选择提示选择“ANSI”类型即可。最后将qt.txt改为qt.conf。 **
九、结尾
做好上述8个步骤之后我们的静态环境就彻底搭建好了,然后就欢乐的码代码吧。
附上自己编译的静态库和编译工具 :链接:https://pan.baidu.com/s/1E3Y40FCmzQQMz_doZ0OYcQ 提取码:fme4
Qt最新版5.12.2在Win10环境静态编译安装和部署的完整过程(VS2017)的更多相关文章
- Win10 VS2015 静态编译Qt5.6.2源码
由于VS2015需要CRT等拓展组件,因此把内部编写的工具软件以静态发布,固需要编译Qt源码.Qt5.6.2版本,VS2015,Win10 1.安装python,perl,下载jom 2.改文件com ...
- Anaconda 安装教程(Win10环境) Tensorflow安装
序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.An ...
- RabbitMQ 在 Win10 环境下的安装与配置
1 RabbitMQ 环境配置 1.1 ErLang 下载安装 RabbitMQ 需要 ErLang 环境支持:首先下载 ErLang 并安装. 建议使用新版本,版本过低存在与 Rab ...
- suse 12 sp3 利用shell脚本离线编译安装ansible
# 测试环境是suse 12 sp3的系统,机器都是内网使用的,安装ansible真的很难顶 # 测试环境使用的python版本:2.7.13-27 # 此脚本只在本人测试环境成功,其他环境,需要选择 ...
- win10环境下tensorflow-gpu安装
踩了很多坑,浪费了一下午时间,在此记录一下. pip install tensorflow-gpu 然后下载安装cuda8.0 https://developer.nvidia.com/cuda-do ...
- 【初学必备】Win10环境下Anaconda安装
Anaconda集合了python,Spyder,Jupyter notebook及conda-----包管理器与环境管理器(含常用的panda,numpy等),省去单独下载的繁琐步骤,方便使用. 注 ...
- win10 环境下 MinGW-w64安装
MinGW-w64 就是 著名C/C++编译器GCC的Windows版本. 一.什么是 MinGW-w64 ?MinGW 的全称是:Minimalist GNU on Windows .它实际上是将经 ...
- Win10 Ubuntu18.04 编译安装 nignx
nginx 下载页 http://nginx.org/en/download.html wget http://nginx.org/download/nginx-1.14.0.tar.gz //安装依 ...
- Linux/Ubuntu下 静态编译Qt程序
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...
随机推荐
- 下拉选择框,PopupWindow的使用
实现下拉选择框 直接上代码 Activity.java package com.example.shaofei.customerviewdemo1; import android.os.Bundle; ...
- python课堂整理7---集合
前面小节: sep 用来控制每个元素间的间隔符号 print("alex", "dabai", "liu", sep = "&qu ...
- ssh,公钥和私钥,远程复制
ssh,公钥和私钥,远程复制 1.openssh 是一个提供远程访问控制的软件 2.ssh 远程主机用户@远程主机ip地址 ssh root@172.25.254.1 The authenticity ...
- google、谷歌浏览截图
对于前端好用的浏览器---谷歌浏览器(没有插件)截取全屏很难受! 特备是前端,想截图下来,好好的量一下容器之前的尺寸(手动恼火) 对于程序员来说不一定需要插件,有很多大佬应该都知道, 小白记忆不好,每 ...
- 使用用树莓派打造远程WEB服务器
简介:系统配置Raspberry Pi 3B + Raspbian + MySQL5.7 + Tomcat 9 + Nginx + 公网IP. 工具:Win32DiskImager .FileZill ...
- Robotframework获取移动端toast问题
背景: 在做移动端自动化测试的时候,经常会遇到一个问题就是获取toast提示问题,如果需要解决这个问题需要重新处理,不能按照正常的逻辑,使用robotframework自带的关键字进行获取,需要重新考 ...
- 【kafka】一、消息队列
在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞.例如,大量的插入.更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异常” 的错误.因此 ...
- spring cloud stream 经验总结
---恢复内容开始--- 基本概念 spring: cloud: stream: kafka: binder: brokers: cloudTest:19092 zk-nodes: cloudTest ...
- MySQL数据库基本知识(理论总结)
定义:数据库就是一个文件系统,通过sql语句来获取数据 关系型数据库:关系型数据库存放的是实体时间的关系,在数据库层面来看就是存放的是表和表之间的关联关系 常见的关系型数据库 MySQL D ...
- 剑指offer-链表
1. 链表中环的入口节点 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路一:用哈希表存已经遍历过的节点,O(1)复杂度查找,如果再次遇到就是环入口 # -*- cod ...