问题标签 [windeployqt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - QWebEngineView 在 Windows 发布版本上崩溃,因为它找不到所需的资源文件
我目前正在使用 Qt 5.9 为 Windows 开发一个应用程序,该应用程序使用QWebEngineView
实例在内部显示一些本地 HTML 文件。代码相当简单,我认为它与手头的问题无关:
这在我的开发机器上很好地工作,在调试和发布配置上。我的应用程序已经投入生产,因此可以使用Qt Installer Framework进行安装。我正在使用windeployqt进行部署。同样,安装的二进制文件可以毫无问题地呈现我机器上的网页。但是,在具有相同操作系统的不同机器上,只要实例化 Web 视图,它就会崩溃。
经过一些调试,这是我的发现:
根据网络引擎上的文档:
Qt WebEngine 需要以下资源文件:
qtwebengine_resources.pak 包含 Chromium 所需的资源。qtwebengine_devtools_resources.pak 包含用于远程调试的工具。qtwebengine_resources_100p.pak 包含适用于低分辨率显示器的图像。qtwebengine_resources_200p.pak 包含适合高 DPI 显示的图像。icudtl.dat 为 Unicode 国际组件 (ICU) 提供支持。它是 ICU 的 Chromium 版本,如果将 Qt WebEngine 配置为使用系统 ICU,则不需要它。
从以下位置搜索资源:
在 Linux 和 Windows 上:QLibraryInfo::location(QLibraryInfo::DataPath) 指定目录中的资源目录
我发现这很奇怪,因为应用程序目录的输出会产生以下内容(为方便起见进行了修剪):
这清楚地表明网络引擎文件在理论上是正确定位的。我尝试调试 的值QLibraryInfo::location(QLibraryInfo::DataPath)
,它产生了C:/Qt/Qt5.9.2/5.9.2/msvc2017_64
,它甚至不是目标机器上的目录,而是我的开发 PC 上的目录。相反,我认为它应该输出./resources
.
如果我将文档中提到的文件与它应该运行的应用程序二进制文件放在同一目录中,但我希望QLibraryInfo::DataPath
自动检测该目录的位置,而不是看起来是硬编码的价值。
因此,我想问以下问题:
- 我是否正确执行此部署?我从来没有遇到过应用程序无法加载任何类型的 Qt 库的问题,而且文件似乎在它们应该在的位置。
- 究竟如何
QLibraryInfo::location(QLibraryInfo::DataPath)
解决路径?它们是硬编码的值还是在运行时确定的? 让应用程序找到资源的最明智的方法是什么?我正在考虑以下解决方案:
- 手动将文件放在
./resources
靠近应用程序二进制文件的位置。 - 添加
./resources
到搜索路径QCoreApplication::addLibraryPath()
(我不确定它是否会起作用)。 玩弄一个
qt.conf
文件。再次不确定它是否会起作用。编辑:这确实有效。奇怪的是,如果文件被编译为 Qt 资源(如 中:/qt/etc/qt.conf
),它不会,但如果你将文本文件放在应用程序二进制文件中,它会自动使用它。我的文件看起来很简单:[路径]
数据 = ./resources
- 手动将文件放在
任何帮助都感激不尽!
qt - 用于调试版本的 Qt windeployqt 不会复制所有 dll
我在 Windows 10 下的 qt 部署有问题。一开始,我在 Windows 10 上使用 QtCreator 4.5.0 和 Qt 5.10。对于部署,我像这个问题中的 awnser 一样配置我的项目文件(Automatic Copy of Dependent Qt Creator 中的文件)一年多以来它工作正常,但自去年年底以来它没有。如果我构建发布版本一切都很好,但在调试模式下,一些 dll 丢失了。如果我手动复制这些程序运行正确,否则不会显示任何图标。到目前为止,我可以在 git 中看到它,项目文件中没有任何修改,因为它最终可以正常工作。
项目文件中的部署行:
这是我完整的项目文件:
用于调试和发布版本的 windeployqt --list 映射的输出:
有人有想法或提示让我找到错误吗?
谢谢斯文·阿诺·乔彭
qt - 使用 windeployqt 执行 qt .exe 文件时出错
我在 Windows 10 下的 qt 部署有问题。我在 Windows 10 上使用 QtCreator 4.5.1 和 Qt 5.11。我在发布模式下执行我的应用程序。然后我通过运行 Qt5.11.0 for Desktop(MinGw 5.3.0 32 位)打开命令行。在那里我给出了发布文件夹的路径(我的 exe 文件所在的位置):
之后我输入这一行:
并且将生成所有必要的 .dll 文件和平台和插件。
当我对一个简单的 qt 项目执行此操作时,它工作正常,并且我的 exe 文件可以正确执行。而当我对我想要的项目做同样的事情时,我无法执行我的 exe 文件并且我得到这个错误:
我试图通过在依赖walker中执行它来查找dll文件。当我这样做时,它显示了很多 dll 文件丢失,例如即使在 mingw 的 bin 文件夹中也不存在的“API-MS-WIN-EVENTING-CONTROLLER-L1-1-0.DLL”。如果我将 exe 文件放在 mingw 的 bin 文件夹中,它可以正常工作。
因此,我试图找到其子 dll 文件丢失的所有主要 dll 文件,并将它们复制到发布文件夹中。例如对于 API-MS-WIN-EVENTING-CONTROLLER-L1-1-0.DLL,我将 Qt5core.DLL 复制到发布文件夹。但它没有再次起作用。
我不明白问题出在哪里。你能帮我解决吗?从昨天早上开始,我一直在寻找,但找不到解决方案。
qt5 - Windeployqt 部署除 exe 文件外的所有内容
我正在尝试使用
这会将所有需要的文件复制到 e:\deptest,但是我调用 windeployqt 的 exe 文件没有被复制。如果我手动将它复制到目标文件夹,我可以运行它就好了。
Windeployqt 没有错误地完成,但是我不太确定这是否是预期的行为,或者这里是否做错了什么。
我必须自己复制exe,还是我错过了什么?
qt - 部署 Qt Windows 应用程序
我很难将我的 Windows 应用程序部署到其他计算机。
使用windeployqt,程序在我的机器上独立运行非常好。即使在重命名 Qt Root 和项目根目录之后,也要确保 .exe 使用捆绑的 .dll。
虽然,应用程序在任何其他 pc/vm 上启动后立即崩溃。我已经尝试将整个 bin/plugins/qml/platforms 文件夹手动复制到 .exe 社区,但没有成功。这是来自 x96dbg 的日志转储:
在哪里寻找错误?
qt - windeployqt 模块 QtQuick 未安装
我正在尝试部署一组 QT 应用程序。在 linux 上,安装所有依赖项后,所有应用程序都可以正常工作,但在 windows 中,基于 QtQuick 的应用程序根本无法正常工作。
要在 Windows 上部署,我按照以下步骤操作:
- 在发布模式下编译我的项目。
- 添加
mingw
到系统环境路径 - 跑
windeployqt.exe --release c:\myappdir\relesase\myapp.exe
当第 3 步完成时,我在其中的release
文件夹Qt5Quick.dll中有很多 dll。但myapp.exe
不起作用,也没有抛出任何错误。为了获得任何额外的信息,我添加console
到myapp.pro文件下的CONFIG参数并通过控制台运行 myapp.exe,我得到了以下信息:
我的 QtSDK 版本是带有MinGW的 5.10.0,所以这个解决方案根本不起作用,我遇到了更多错误。
更重要的是,如果我尝试在根文件夹中没有这些 dll 的情况下运行 myapp.exe,它可以正常工作。
我整天都在试图找到任何解决方案,但似乎没有任何效果。
我很确定我错过了一些东西,但我不知道它是什么。谢谢
qt - “警告:找不到 GCC 安装目录。g++.exe 必须在路径中。” 使用windeployqt时
当我运行windeployqt
部署我的应用程序时,我收到以下警告:
即使我已将Path
环境变量设置为包含位于C:\Qt\Qt5.12.0\5.12.0\mingw73_64\bin
. 结果,我可以看到编译器运行时库不包含在部署的包中,即使我显式使用--compiler-runtime
flag。我不确定我错过了什么步骤?
qt - 运行windeployqt后找不到平台插件DLL
我正在使用独立的 exe 单独制作 VST 音频插件,两者都共享大部分代码,并且我正在尝试使用 Qt Quick 制作弹出窗口。
一开始,我将 Qt DLL 从安装bin
文件夹复制到我的二进制文件文件夹中,但没有从文件夹中复制任何内容。弹出窗口在exe版本中正常工作;但是对于VST版本,它声称无法加载DLL。Visual Studio 的一些调试输出附在下面:plugins
qml
QtQuick.Controls
奇怪的是,DLL已经加载了,突然卸载了
经过一番努力,我发现它windeployqt
会收集运行 Qt 程序所需的所有东西。然后我运行它:
在这个操作之后,事情变得更糟了:现在 exe 和 VST 都找不到平台 DLL。但是我可以看到平台 DLL 文件就在platforms/qwindowsd.dll
,在其他收集的 Qt DLL 文件的同一目录中。
另外,我发现 Qt5Cored.dll 被修改了windeployqt
,因为它的修改时间改变了。我找到了一个--no-patchqt
不修补 Qt5Core 库的选项。补丁是干什么用的?
visual-studio - 如何将 Qt 的 windeployqt 集成为 Visual Studio 构建工作流的一部分?
每次在 Visual Studio 中首次构建新的 Qt 项目时,即使安装了 VS 工具,我也必须复制一些与 Qt 相关的二进制文件(Qt5Core.dll、平台文件......)。否则,当从 Visual Studio 运行时,Qt5Core.dll
(或调试)正确找到但不是平台 DLL:
显然,当从 IDE 外部运行时,它也会失败,例如,在自动化构建的单元测试期间。
Qt 有一个这样做的工具,称为windeployqt
,它基本上查找依赖项 (Qt) 并复制它们。例如:
将分析其中的可执行文件c:\projects\qt-project\Release
并将所需的 DLL、插件、翻译和其他相关二进制文件复制到该位置。
我对如何集成windeployqt
到 Visual Studio 的构建工作流感兴趣,因此这个过程是自动的(即使在不同的计算机上签出)。