qtcreator - exe 在 qtcreator 内部工作正常,但不在外部
Posted
技术标签:
【中文标题】qtcreator - exe 在 qtcreator 内部工作正常,但不在外部【英文标题】:qtcreator - exe does work fine inside qtcreator but doesn't outside 【发布时间】:2013-01-26 14:06:12 【问题描述】:我想给我的一个朋友一个小项目的发布版本。 从 qtcreator 内部启动时它工作得非常好,但在双击 .exe 文件时无法打开。它甚至没有给我错误消息。
现在,当我尝试在我的 exe 文件旁边复制一些 Qt .dll 文件(如 Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll)时,它并没有改变任何东西。 我如何知道我的项目有哪些依赖项? .pro 文件并没有告诉我太多
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = project1
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
我正在使用基于 Qt 5.0.0(32 位)的 Windows 7(64 位)、Qt Creator 2.6.1
感谢您的帮助 萨迪克
编辑:可以在我的回答中看到解决方案
【问题讨论】:
从控制台启动它以查看打印的潜在错误,请查看technet.microsoft.com/en-us/sysinternals/bb896647.aspx。使用依赖遍历器 (dependencywalker.com) 检查 DLL 依赖关系。确保在目标系统上安装了 MSVC 或 mingw 运行时。 (取决于您使用的编译器)。 从控制台启动时没有任何反应。我正在使用 MSVC。是否有可能在没有正确安装 MSVC 的情况下在 qtcreator 中运行该版本?使用dependencywalker 在“gpvcs.dll”旁边出现错误:警告:未找到至少一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。 【参考方案1】:解决了!我所要做的就是下载“libEGL.dll”并将其放在我的exe文件所在的目录中。当然,qt 中的所有其他 .dll 文件也是需要的。但是这些在错误消息中明确提到。但是对于“libEGL.dll”,甚至没有错误消息。 可以忽略“dependency walker”中列出的 .dll 文件。对于我的问题,这个工具并没有真正帮助。它没有列出 libEGL.dll,但列出了其他实际上未使用的 .dll 文件。
【讨论】:
您不需要下载这些 DLL。它们应该在 Qt bin 目录中。通常C:\Qt\Qt5.0.0\5.0.0\msvc2010\lib
使用 VS 2010 安装程序时。【参考方案2】:
How can I know what dependencies my project has?
您可以使用来自official site 的程序 Dependency Walker 来查看您的程序需要什么 dll。
注意使用相同版本的Qt dll(如果您使用Qt5,请从Qt5的bin
目录中找到您的dll,依此类推)。
【讨论】:
Dependency Walker 在“gpvcs.dll”旁边给我一个错误:警告:未找到至少一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。我只有 64 位的 gpvcs.dll。如果我将它复制到我的 exe 文件所在的目录中,它会为我提供与 SYSNTFY.DLL 相同的错误消息 下载 x86 dll 文件并将它们放入目录后,我在 Dependency Walker 中只收到一个警告:警告:由于延迟加载中缺少导出功能,至少一个模块具有未解析的导入依赖模块。 - dclick exe文件时我仍然没有收到任何消息【参考方案3】:既然您在谈论 Qt5,请确保在您的 program.exe 文件目录中至少有一个platforms
目录,其中包含qminimal.dll
。它们是对 Qt 所做的新更改的一部分。 (也可能是qwindows.dll
)。
此外,如果您不使用静态链接进行编译,请确保包含适当的 msvcr*.dll
dll。检查依赖walker。
/myProgram.exe
/Qt5Gui.dll
/Qt5Core.dll
/ .... (other DLLs you require)
/platforms/qminimal.dll
/platforms/qwindows.dll (Not always required)
【讨论】:
【参考方案4】:你用的是什么编译器?如果您使用的是 MSVC++,则需要为编译器捆绑运行时 DLL 文件或让用户安装 Microsoft Visual C++ Redistributable Package。
【讨论】:
以上是关于qtcreator - exe 在 qtcreator 内部工作正常,但不在外部的主要内容,如果未能解决你的问题,请参考以下文章
.exe 文件在 QtCreator 中构建后停止并最终启动?