我在Windows 7 64位(使用msvc 2010)上使用Qt Creator构建了一个Qt 5应用程序。这个应用程序在我的电脑上运行得很好,但在其他电脑上不能运行。
我将Dependency Walker中显示缺失的所有.dll复制到program文件夹中,没有错误,但应用程序就是无法运行。
我在64位和32位的Windows XP和Windows 7上测试了它。
我该怎么做才能找出问题所在?
更新:我安装了Qt 4.8.4 (vs 2008)和msvc 2008 express,我编译了它,它在其他计算机上运行,与Qt4的。dll。也许有人知道Qt5有什么问题…
我也遇到过同样的问题。
你需要在你的可执行目录中包含包含qwindows.dll和qminimal.dll的"platform"目录。你可以在"plugins"文件夹下找到该目录。
如果您不添加这个,您的应用程序将加载,然后退出并返回代码0。因为dll是延迟加载的,所以依赖项跟踪器无法帮助您。
我遇到了同样的问题——我添加了Dependency Walker报告的所有dll,但是我的程序在运行时立即退出,没有任何错误消息。
我将libEGL.dll
添加到程序目录中,现在它正常运行了。
我猜libEGL.dll
是由其他dll中的一个动态加载的——可能是libGLESv2.dll
,基于所有已知的依赖关系,它有最相似的名字(!)——动态加载不是依赖Walker可以检测到的。
我也经历过同样的问题,并且从这篇文章中了解到MinGW GCC 4.7与Qt 5.0及以上版本不兼容。我采取了同样的方法,你做了,并切换到Qt Creator 4.8工作。
我也有同样的问题,并尝试与DLL丢失消息&依赖性助行器,它对我没有帮助或者我不知道我是否正确地使用了它。下面的方法帮助我解决了(对于给定的场景)它。这个方法在某些最小的情况下是有效的。
- QT Creator 3.3.2
- QT 5.4.1 (MSVC 2010, 32位),Windows 8.1 OS
- 没有动态加载dll的
- 未使用第三方dll 这是一个QTWidget应用程序。
方法(尝试了两个套件MinGW 32位&MSVC2012 OpenGL 32位)
- 在构建应用程序后获取release exe。复制并粘贴到我们想要的另一个文件夹(假设为Z:abc)
- 转到Qt工具包(MinGW或MSVC)安装文件夹(在我的情况下:Z:Qt5.4mingw491_32(或)Z:Qt5.4msvc2012_opengl)
- 搜索*.dll
- 复制所有DLL并粘贴到exe放置文件夹。即(z:abc)
- 运行应用程序(在我的情况下,它正常启动)。
-
在运行应用程序时,删除所有复制的DLL文件。
6.1)当删除时,windows将显示提示,为DLL文件正在被应用程序(正在使用的文件)使用,因为这些DLL是最初加载的。让那些文件保持原样。
- 关闭应用程序并重新打开它(在我的情况下,它正常启动)。 所以这里我们得到了所需的DLL的
这不是一个正确的方法,但在某些情况下它可能会有所帮助。
注意
在复制所有DLL时,当收到文件已经存在的消息时,根据系统的决定,将两个文件保留为不同的名称。如果应用程序不能运行,那么我们可以尝试使用这些重命名的文件。
我认为它一定是一些DLL,你需要把它放在与你的可执行文件相同的目录中,或者甚至可能在你的PATH目录中。无论哪种方式,我也使用Qt5,我遇到了同样的问题,如果我不把这些放在我的exe文件的同一目录:
- vcruntime140[d].dll (MSVC库)
- ucrtbase[d].dll(另一个MSVC库—我使用MSVC/Visual c++) Qt5Widgets[d].dll (Qt 5库)
- Qt5Svg[d].dll(另一个Qt5库) Qt5PrintSupport[d].dll(另一个Qt5库)Qt5Gui[d].dll(你猜对了)
- Qt5Core [d] . dll(是的)
- msvcp150[d].dll(我相信是另一个微软可重新分发的)
当然,你可能不会使用我正在使用的那些Qt库,在这种情况下,你不需要它们。此外,您可能有不同的工具链调用不同的dll,但我认为想法是相同的,此外,可能您有一个相同的设置和我的。
我将[d]
附加到每个库的末尾,因为对于调试构建,它们在末尾有d
,但对于发布构建,它们没有。这个部分在你的机器上可能是相同的,也可能不是。