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

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

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

1. MSVC2015 x86 静态编译

1.1 Qt 官网下载最新源代码

立即下载

1.2 参考 Qt 官网提供的教程

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

  1. ActivePerl
  2. Python

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

1.3 配置和编译

修改配置

srcqtbasemkspecscommonmsvc-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:QtQt5.9.45.9.4msvc2015_static_x86"
nmake
nmake install

//如需要静态链接 -openssl 库,则在上面的命令中追加以下语句:
-openssl-linked OPENSSL_INCDIR=D:QtOpenSSL-Win32include OPENSSL_LIBDIR=D:QtOpenSSL-Win32libVCstatic 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:QtQt5.9.45.9.4msvc2015_static_x86"   指定生成目录

更多请自行查看 configure -help

2. Qt 部署静态库

1. 把静态编译的库移动到 Qt msvc2015 同级目录下,然后复制已有的 qt msvc2015inqt.conf 文件 和 qmlscene.exe。放入静态库 bin 里面。
2. 打开Qt ,选择 工具->选项->构建和运行->构建套件(kit),克隆一个配置,然后再 Qt Versions 添加静态编译的库 binqmake.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)pluginsplatforms
5. 链接器->常规->附加库目录 添加 $(QTDIR)pluginsplatforms
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:QtQt5.9.45.9.4msvc2015_static_x86
D:Qtqt-everywhere-opensource-src-5.9.4configure -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:QtOpenSSL-Win32static_sslinclude OPENSSL_LIBDIR=D:QtOpenSSL-Win32static_ssllib OPENSSL_LIBS="-llibeay32 -lssleay32 -lGdi32" -nomake examples -nomake tests -no-compile-examples -prefix "D:QtQt5.9.45.9.4msvc2015_static_x86"
nmake
nmake install

@echo off
rem 设置环境变量
set MSVC_PATH="D:ProgramsMicrosoft Visual Studio 12.0"

nmake clean
原文地址:https://www.cnblogs.com/cheungxiongwei/p/8251537.html