Qt 5.9.4 如何静态编译和部署?

  • MSVC2015 x86 静态编译
  • Qt 部署静态库
  • VS2015 部署静态库

1. MSVC2015 x86 静态编译

1.1 Qt 官网下载最新源代码

立即下载

1.2 参考 Qt 官网提供的教程

参考上面文档后,发现需要安装以下依赖:

  1. ActivePerl
  2. Python

成功安装后即可开始编译。

1.3 配置和编译

修改配置

  1. src\qtbase\mkspecs\common\msvc-desktop.conf
  2. 源:
  3. QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD
  4. QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MD -Zi
  5. QMAKE_CFLAGS_DEBUG = -Zi -MDd
  6. 修改后:
  7. QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MT
  8. QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -MT -Zi
  9. QMAKE_CFLAGS_DEBUG = -Zi -MTd

使用 msvc x86 命令行工具,cd 到 qt 源代码目录。

  1. 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"
  2. nmake
  3. nmake install
  4. //如需要静态链接 -openssl 库,则在上面的命令中追加以下语句:
  5. -openssl-linked OPENSSL_INCDIR=D:\Qt\OpenSSL-Win32\include OPENSSL_LIBDIR=D:\Qt\OpenSSL-Win32\lib\VC\static OPENSSL_LIBS="-llibeay32MT -lssleay32MT -lGdi32"
  6. //OPENSSL_INCDIR:头文件目录
  7. //OPENSSL_LIBDIR:库文件目录
  8. //OPENSSL_LIBS:静态库
  9. -confirm-license 自动选择开源协议
  10. -debug-and-release debugrelease编译
  11. -static 静态编译
  12. -static-runtime
  13. -mp 多线程编译
  14. -accessibility 可访问性支持,官方建议开启
  15. -platform win32-msvc 选择目标平台
  16. -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype 使用qt自带的图像和压缩处理库,不使用系统的,默认是系统找不到则自动使用qt自带的库
  17. -opengl dynamic 动态选择加载库方式 opengl
  18. -nomake examples -nomake tests -no-compile-examples 不编译例子
  19. -prefix "D:\Qt\Qt5.9.4\5.9.4\msvc2015_static_x86" 指定生成目录
  20. 更多请自行查看 configure -help

2. Qt 部署静态库

  1. 1. 把静态编译的库移动到 Qt msvc2015 同级目录下,然后复制已有的 qt msvc2015\bin\qt.conf 文件 qmlscene.exe。放入静态库 bin 里面。
  2. 2. 打开Qt ,选择 工具->选项->构建和运行->构建套件(kit),克隆一个配置,然后再 Qt Versions 添加静态编译的库 bin\qmake.exe
  3. 3. 修改 克隆配置 里面的 qt 版本,设置为 步骤 2 添加的即可。
  4. ...
  5. 现在就可以正式编译 exe 程序了。

3. VS205 部署静态库

  1. 1. 安装 Qt 插件
  2. 2. Qt VS tool -> Qt Options 添加一个 Qt Versions,选择 静态库根目录即可
  3. 3. 新建一个 Qt 工程,Qt Project Settings 设置为 步骤1 配置的版本。
  4. 4. C/C++->常规->附加包含目录$(QTDIR)\plugins\platforms
  5. 5. 链接器->常规->附加库目录 添加 $(QTDIR)\plugins\platforms
  6. 6. 链接器->常规->附加依赖项 添加以下 *.lib 文件
  7. qtmain.lib
  8. Qt5Core.lib
  9. Qt5Gui.lib
  10. Qt5Widgets.lib
  11. qwindows.lib
  12. qtlibpng.lib
  13. qtpcre2.lib
  14. qtfreetype.lib
  15. qtharfbuzz.lib
  16. Qt5FontDatabaseSupport.lib
  17. Qt5ThemeSupport.lib
  18. Qt5AccessibilitySupport.lib
  19. Qt5EventDispatcherSupport.lib
  20. imm32.lib
  21. winmm.lib
  22. ws2_32.lib
  23. dwmapi.lib
  24. uxtheme.lib
  25. version.lib
  26. glu32.lib
  27. opengl32.lib
  28. main.cpp 最前面添加以下内容:
  29. #include <QtPlugin>
  30. Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
  31. ...以上操作后即可编译 exe 程序。
  32. 最后补充一句,如何查找 模块的静态依赖?
  33. 在静态编译的lib文件夹里面查看 模块的 prl 文件,里面详细列举的模块的静态依赖!需要使用该模块了,就需要该静态依赖!
  1. rem 影子构建
  2. cd D:\Qt\Qt5.9.4\5.9.4\msvc2015_static_x86
  3. 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"
  4. nmake
  5. nmake install
  6. @echo off
  7. rem 设置环境变量
  8. set MSVC_PATH="D:\Programs\Microsoft Visual Studio 12.0"
  9. nmake clean

Qt 5.9.4 如何静态编译和部署?的更多相关文章

  1. Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)

    大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...

  2. Qt Creator内qmake配置静态编译

    起因 利用QT Creator编写一些纯C/C++应用,默认配置下是动态编译 解决 解决起来很简单,这里只是附上配置备忘;-) msvc: { QMAKE_CFLAGS_RELEASE += /MT ...

  3. 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 ...

  4. 记录下 QT Linux 静态编译遇到的坑

    Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

  5. QT全平台设置图标,全平台静态编译 good

    1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...

  6. C++ Qt 框架静态编译 操作记录

    谁愿意写个程式出来之后还附带一堆DLL,尤其是名字如此明显的名字. 于是在网上看了看,是需要下载源代码然后进行编译的,但是看了看别人说的编译时间,长达几个小时,瞬间就感觉不想做了.因为我还需要抓紧时间 ...

  7. QT静态编译

    Qt静态编译(链接)和动态编译区别 Qt的静态编译译(其实应该叫链接,不是编译),将各模块编译成静态库,这样在编译自己写的Qt程序时,会将这些静态库编译(链接)到你的EXE文件中去的.Qt的动态编译, ...

  8. Qt 静态编译的问题.

    编译参数 configure -confirm-license -opensource -developer-build -static -prefix D:\libraries\Qt5.3.1s - ...

  9. Qt库的静态编译

    一.准备软件1. MinGW     (C:\Qt\MinGW)http://pan.baidu.com/share/link?shareid=174269&uk=673227135这个文件解 ...

随机推荐

  1. CSS3 动画及过渡详解

    今天开始我们一起来学习有关于CSS3制作动画的几个属性:变形(transform).过渡(transition)和动画(animation)等CSS3技术. 首先我们先来了解一下变形(transfor ...

  2. SCOPE_IDENTITY()

    @@IDENTYITY,SCOPE_IDENTITY的主要区别:在有触发器中而且触发器的内容里面含有插入标识符的操作的时候,@@IDENTITY则返回的是触发器里面新插入标识符的值而SCOPE_IDE ...

  3. Percona监控MySQL模板详解

    InnoDB Adaptive Hash Index 显示了"自适应哈希索引"的使用情况,哈希索引只能用来搜索等值的查询. # Hash table size 17700827, ...

  4. 【转】国外几款GPS卫星历预报软件

    以下是几款著名GPS厂商的星历软件: Trimble星历软件: http://www.trimble.com/planningsoftware.shtml Topcon星历软件: http://www ...

  5. JDK配置测试

    JDK配置测试 介绍两种JDK配置方式: 一:大多数人配置方法 1.下载JDKhttps://www.baidu.com2.配置环境变量单击"计算机-属性-高级系统设置",单击&q ...

  6. 用Lua定制Redis命令

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  7. 禁掉或启用firefox 的 javascript 脚本

    老版本的firefox可以直接在“选项”页设置启用或禁用javascript 脚本 新版的Firefox中,我找了半天,没有找到,看来是没法直接设置了 于是在 地址栏键入 about:config 搜 ...

  8. [Sdoi2017]序列计数 [矩阵快速幂]

    [Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ...

  9. CDN设置回源host的意义

    CDN设置回源host的意义 如果CDN后端用户的的源站web服务上没有绑定加速域名,只绑定了其他域名,未限制域名访问(比如通过服务器IP可以访问到默认网站),可以在CDN控制台填写回源host,这样 ...

  10. [代码]JS原生Ajax,GET和POST

    javascript/js的ajax的GET请求: <script type="text/javascript"> /* 创建 XMLHttpRequest 对象 */ ...