Qt 5.9.4 如何静态编译和部署?
Qt 5.9.4 如何静态编译和部署?
- MSVC2015 x86 静态编译
- Qt 部署静态库
- VS2015 部署静态库
1. MSVC2015 x86 静态编译
1.1 Qt 官网下载最新源代码
1.2 参考 Qt 官网提供的教程
参考上面文档后,发现需要安装以下依赖:
- ActivePerl
- Python
成功安装后即可开始编译。
1.3 配置和编译
修改配置
src\qtbase\mkspecs\common\msvc-desktop.conf
源:
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
修改后:
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
使用 msvc x86 命令行工具,cd 到 qt 源代码目录。
configure -confirm-license -debug-and-release -static -static-runtime -mp -accessibility -platform win32-msvc -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -opengl dynamic -nomake examples -nomake tests -no-compile-examples -prefix "D:\Qt\Qt5.9.4\5.9.4\msvc2015_static_x86"
nmake
nmake install
//如需要静态链接 -openssl 库,则在上面的命令中追加以下语句:
-openssl-linked OPENSSL_INCDIR=D:\Qt\OpenSSL-Win32\include OPENSSL_LIBDIR=D:\Qt\OpenSSL-Win32\lib\VC\static OPENSSL_LIBS="-llibeay32MT -lssleay32MT -lGdi32"
//OPENSSL_INCDIR:头文件目录
//OPENSSL_LIBDIR:库文件目录
//OPENSSL_LIBS:静态库
-confirm-license 自动选择开源协议
-debug-and-release debug和release编译
-static 静态编译
-static-runtime
-mp 多线程编译
-accessibility 可访问性支持,官方建议开启
-platform win32-msvc 选择目标平台
-qt-zlib -qt-libjpeg -qt-libpng -qt-freetype 使用qt自带的图像和压缩处理库,不使用系统的,默认是系统找不到则自动使用qt自带的库
-opengl dynamic 动态选择加载库方式 opengl
-nomake examples -nomake tests -no-compile-examples 不编译例子
-prefix "D:\Qt\Qt5.9.4\5.9.4\msvc2015_static_x86" 指定生成目录
更多请自行查看 configure -help
2. Qt 部署静态库
1. 把静态编译的库移动到 Qt msvc2015 同级目录下,然后复制已有的 qt msvc2015\bin\qt.conf 文件 和 qmlscene.exe。放入静态库 bin 里面。
2. 打开Qt ,选择 工具->选项->构建和运行->构建套件(kit),克隆一个配置,然后再 Qt Versions 添加静态编译的库 bin\qmake.exe
3. 修改 克隆配置 里面的 qt 版本,设置为 步骤 2 添加的即可。
...
现在就可以正式编译 exe 程序了。
3. VS205 部署静态库
1. 安装 Qt 插件
2. Qt VS tool -> Qt Options 添加一个 Qt Versions,选择 静态库根目录即可
3. 新建一个 Qt 工程,Qt Project Settings 设置为 步骤1 配置的版本。
4. C/C++->常规->附加包含目录$(QTDIR)\plugins\platforms
5. 链接器->常规->附加库目录 添加 $(QTDIR)\plugins\platforms
6. 链接器->常规->附加依赖项 添加以下 *.lib 文件
qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
qwindows.lib
qtlibpng.lib
qtpcre2.lib
qtfreetype.lib
qtharfbuzz.lib
Qt5FontDatabaseSupport.lib
Qt5ThemeSupport.lib
Qt5AccessibilitySupport.lib
Qt5EventDispatcherSupport.lib
imm32.lib
winmm.lib
ws2_32.lib
dwmapi.lib
uxtheme.lib
version.lib
glu32.lib
opengl32.lib
main.cpp 最前面添加以下内容:
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
...以上操作后即可编译 exe 程序。
最后补充一句,如何查找 模块的静态依赖?
在静态编译的lib文件夹里面查看 模块的 prl 文件,里面详细列举的模块的静态依赖!需要使用该模块了,就需要该静态依赖!
rem 影子构建
cd D:\Qt\Qt5.9.4\5.9.4\msvc2015_static_x86
D:\Qt\qt-everywhere-opensource-src-5.9.4\configure -confirm-license -debug-and-release -static -static-runtime -mp -accessibility -platform win32-msvc2015 -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -opengl dynamic -openssl-linked OPENSSL_INCDIR=D:\Qt\OpenSSL-Win32\static_ssl\include OPENSSL_LIBDIR=D:\Qt\OpenSSL-Win32\static_ssl\lib OPENSSL_LIBS="-llibeay32 -lssleay32 -lGdi32" -nomake examples -nomake tests -no-compile-examples -prefix "D:\Qt\Qt5.9.4\5.9.4\msvc2015_static_x86"
nmake
nmake install
@echo off
rem 设置环境变量
set MSVC_PATH="D:\Programs\Microsoft Visual Studio 12.0"
nmake clean
Qt 5.9.4 如何静态编译和部署?的更多相关文章
- Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)
大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...
- Qt Creator内qmake配置静态编译
起因 利用QT Creator编写一些纯C/C++应用,默认配置下是动态编译 解决 解决起来很简单,这里只是附上配置备忘;-) msvc: { QMAKE_CFLAGS_RELEASE += /MT ...
- Qt 4.8.2.+VS2008静态编译
一.下载Qt 4.8.2-opensource. 二.解压到C:\Qt\4.8.2_static 修改C:\Qt\4.8.2_static\projects.pro文件,删除demos,doc,exa ...
- 记录下 QT Linux 静态编译遇到的坑
Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...
- QT全平台设置图标,全平台静态编译 good
1. 概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...
- C++ Qt 框架静态编译 操作记录
谁愿意写个程式出来之后还附带一堆DLL,尤其是名字如此明显的名字. 于是在网上看了看,是需要下载源代码然后进行编译的,但是看了看别人说的编译时间,长达几个小时,瞬间就感觉不想做了.因为我还需要抓紧时间 ...
- QT静态编译
Qt静态编译(链接)和动态编译区别 Qt的静态编译译(其实应该叫链接,不是编译),将各模块编译成静态库,这样在编译自己写的Qt程序时,会将这些静态库编译(链接)到你的EXE文件中去的.Qt的动态编译, ...
- Qt 静态编译的问题.
编译参数 configure -confirm-license -opensource -developer-build -static -prefix D:\libraries\Qt5.3.1s - ...
- Qt库的静态编译
一.准备软件1. MinGW (C:\Qt\MinGW)http://pan.baidu.com/share/link?shareid=174269&uk=673227135这个文件解 ...
随机推荐
- 关于手残,搞废我的OLED屏幕的 追悼会
2017-12-1913:36:41 昨天按照B站的资料利用esp12F做了一个天气站,可预报天气,惭愧的是模型做好了,照片还没拍就夭折了,可怜了我20块的屏幕,我心伤悲,莫知我哀呀! 本来调试已经成 ...
- Spring 4.x (一)
1 Spring是什么? Spring是一个开源框架 Spring是为简化企业级应用开发而生的,使用Spring可以使得简单的JavaBean能够实现以前只有EJB才能实现的功能. Spring是一个 ...
- jenkins插件安装与升级[三]
标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 默认的插件 Folders Plugin OWASP Markup Form ...
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化
觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10 梯度消失和梯度爆炸 当训练神经网络,尤其是深度神经网络时,经常会出现的问题是梯度消失或者梯度爆炸,也就是说当你训练深度网络时,导数或坡 ...
- JAVA并发编程学习笔记------线程的三种创建方式
创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...
- 关于css选择器的一些细节
1.如何区分一个html标签的不同样式 使用标签名.类名的方式解决 如果希望特别强调其中的某一个或几个元素,处理的方案有三个: 1.id选择器 2.class选择器 3.层级选择器 看下面的代码: & ...
- 制作 alipay-sdk-java包到本地仓库
一.首先 搭建好maven 基础环境,本地可以运行maven 命令 从支付宝官网上下载sdk https://doc.open.alipay.com/doc2/detail?treeId=54& ...
- bzoj 4836: 二元运算
死活TLE....求助 update 4.3 23:08 求助了tls之后终于过了...分治里次数界写崩了...r-l+1就行... 分治的做法很神奇!本题的限制在于操作类型与权值相对大小有关,而用[ ...
- CDN设置回源host的意义
CDN设置回源host的意义 如果CDN后端用户的的源站web服务上没有绑定加速域名,只绑定了其他域名,未限制域名访问(比如通过服务器IP可以访问到默认网站),可以在CDN控制台填写回源host,这样 ...
- Xposed快速hook关键点
0x01 导读 工作中,常常需要针对各种app进行快速代码定位,找到代码修改和调试各种功能,就不得不面对xposed来进行一系列快速定位关键代码的问题了.那么问题来了,如何快速找到代码呢? 这里值这针 ...