【发布时间】:2018-10-01 05:00:27
【问题描述】:
我正在使用windeployqt 可执行文件来准备我的安装树。该工具将所有必需的(甚至一些不必要的)dll 复制到指定文件夹中,并在 Qt5Core.dll 上修补硬编码路径变量。以下是我执行该工具的方式。
C:\Qt\5.11.2\mingw53_32\bin>windeployqt.exe D:\Imaq
D:\Imaq\Imaq.exe 32 bit, debug executable
Adding Qt5Svg for qsvgicond.dll
Direct dependencies: Qt5Core Qt5Gui Qt5Network Qt5Widgets
All dependencies : Qt5Core Qt5Gui Qt5Network Qt5Widgets
To be deployed : Qt5Core Qt5Gui Qt5Network Qt5Svg Qt5Widgets
Updating Qt5Cored.dll.
Updating Qt5Guid.dll.
Updating Qt5Networkd.dll.
Updating Qt5Svgd.dll.
Updating Qt5Widgetsd.dll.
Updating libGLESV2d.dll.
Updating libEGLd.dll.
Updating D3Dcompiler_47.dll.
Updating opengl32sw.dll.
Updating libgcc_s_dw2-1.dll.
Updating libstdc++-6.dll.
Patching Qt5Cored.dll...
Creating directory D:/Imaq/bearer.
Updating qgenericbearerd.dll.
Creating directory D:/Imaq/iconengines.
Updating qsvgicond.dll.
Creating directory D:/Imaq/imageformats.
Updating qgifd.dll.
Updating qicnsd.dll.
Updating qicod.dll.
Updating qjpegd.dll.
Updating qsvgd.dll.
Updating qtgad.dll.
Updating qtiffd.dll.
Updating qwbmpd.dll.
Updating qwebpd.dll.
Creating directory D:/Imaq/platforms.
Updating qwindowsd.dll.
Creating directory D:/Imaq/styles.
Updating qwindowsvistastyled.dll.
Creating D:\Imaq\translations...
Creating qt_ar.qm...
Creating qt_bg.qm...
.
.
从上面的输出来看,该工具似乎正在运行,没有任何错误。但部署后,如果我尝试执行二进制文件,则会显示以下错误。
从错误来看,似乎正在复制错误的 dll。但是,在我的机器上,我只有一个编译器 (mingw53_32),并且这些 dll 没有其他可能的版本。
注意:我使用在线安装程序安装了 Qt,我只选择了 Qt creator 和列表中的 Qt mingw。安装程序中列出的所有其他组件均未选中。我想知道这个问题是否是因为缺少任何组件。
另外,我尝试过像--debug、--compiler-runtime 这样的开关,尽管这些开关似乎与这个问题没有任何关系。任何指针将不胜感激。
【问题讨论】:
-
我很好奇,为什么要尝试使用调试
dlls(如Qt5Widgetsd.dll, Qt5Cored.dll?不应该使用发布dlls吗?您是否在发布中构建了您的应用程序模式? -
您可以根据需要使用
windeployqt工具部署调试和发布模式。 -
_ZdaPvj是operator delete[](void*, unsigned int)- 你忘记实现了吗?运行时可能不提供此运算符。 -
如何找到映射?还有,我们怎么知道运行时没有提供实现?
-
要找到映射,你需要一个去解码器,有在线 gcc 去解码器可用。该实现可能由某个运行时提供,但在您运行可执行文件时不可用。您可以从所有捆绑的库中转储符号,您可能会注意到未提供相关符号。