综合 · 2026年1月9日

Qt Windows windeployqt.exe 打包并解决依赖问题(无需修改环境变量)

Qt 应用都会依赖诸多类似 QtCore.dll、QtWidgets.dll 等的情况。然而会遇到开发多个应用的场景,但是,要为每一个应用都建立好依赖,会导致占用很大的空间。
因此,对于 QtCore.dll、QtWidgets.dll 这些共用的动态库,就可以将其放置在共享路径下,多个应用共享该动态库。

故,按照此思路,项目结构如下:

appSet/
├── env/    # 存放所有共用的 dll
│   │─ Qt5Core.dll
│   │─ Qt5Gui.dll
│   │─ ...
│   └── plugins/ # 存放 Qt 的插件路径
│       ├─ platforms/
│       │   └─ qwindows.dll
│       └─ ...
├── app_a/
│    ├─ app_a.exe       # 应用A 主程序
│    └─ qt.conf         # 配置文件
│
├── app_b/
│     ├─ app_b.exe       # 应用B 主程序
│     └─ qt.conf         # 配置文件

以 windows x64 为例,为了确保 Qt、C 依赖均被正确安装,因此第一步需要建立 Qt + VC 环境。

  1. 在 win 菜单中,运行 visual studio 中的 x64 Native Tools Command Prompt for VS 2022,即可进入 VC 环境;
    file
  2. 找到电脑中 Qt 的安装路径,在对应构建套件中找到 qtenv2.bat 或 qtenv.bat,例如:D:\Qt\5.15.2\msvc2019_64\bin;
    file
  3. 在 x64 Native Tools Command Prompt for VS 2022 窗口中,调用 D:\Qt\5.15.2\msvc2019_64\bin;
    file
  4. 至此,就建立好了 Qt + VC 环境

将开发好的应用程序(appA.exe)复制到空白路径下,例如 appSet/appA/appA.exe,在命令行中切换到该路径,并执行

windeployqt --release --dir ../env --plugindir ../env/plugins  appA.exe

其他应用也是如此,最终如下图所示
file

在 QtCreator 中创建资源文件 "qml.qrc",添加前缀"/qt/etc/",并且添加 "qt.conf",内容如下

[Paths]
Prefix = ../env
ArchData = .
Data = .
Libraries = .
LibraryExecutables = .
Binaries = ./bin
Plugins = ./plugins
Imports = .
Qml2Imports = .
Translations = ./translations

至此,项目目录已创建完毕,但是注意, 一些主 dll 仍需要复制到 exe 同级路径下(例如Qt5Charts、Qt5Multimedia等),此时,每一个应用即可依赖共享库而独立运行。