我被告知“windeployqt”实用程序,它应该能够收集正确运行我的Windows Qt应用程序所需的所有Qt / MinGW DLL。所以我试了一下。
不幸的是我注意到它收集了更多文件然后需要。我将windeployqt实用程序收集的文件与“Dependency Walker”报告的文件进行了比较。已经正确收集了真正需要的文件,但出于某种原因收集了以下文件:
Qt5Svg.dll
iconengines\qsvgicon.dll
imageformats\qdds.dll
imageformats\qgif.dll
imageformats\qicns.dll
imageformats\qico.dll
imageformats\qjp2.dll
imageformats\qjpeg.dll
imageformats\qmng.dll
imageformats\qsvg.dll
imageformats\qtga.dll
imageformats\qtiff.dll
imageformats\qwbmp.dll
imageformats\qwebp.dll
该应用程序只处理QBus并使用QWidgets显示一个简单的Window。因此,我认为没有理由收集这些DLL。
答案 0 :(得分:1)
windeployqt实用程序将解析您的" EXE"文件并确定使用了哪些包,然后相应地复制所需的DLL。确保在配置/设置环境中调用该实用程序。
我以这种方式使用该实用程序:
执行项目的发布清理构建并记录构建路径和" exe"产生。对于侮辱
c:\myApp\release\
和myApp.exe
创建部署文件夹//除了发布版本文件夹//。例如
c:\myApp\deploy
然后从Qt命令行实用程序调用该实用程序,如下所示:
- Go to all progrmas --> Qt --> Qt command line utility
- cd c:\myApp\deploy
- windeployqt --dir . c:\myApp\release\myApp.exe
答案 1 :(得分:1)
Dependency Walker没有列出DLL的事实并不意味着它不是必需的。
Dependency Walker将仅列出由Windows加载和启动的exe所需的DLL。但是在程序运行时,可能会在以后加载其他DLL。当Qt加载像image format plugins
这样的插件时,会发生这种情况因为它无法事先知道需要什么插件,Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.type.TypeFactory.constructType(Ljava/lang/reflect/Type;Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/JavaType;
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.getJavaType(AbstractJackson2HttpMessageConverter.java:314)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.canRead(AbstractJackson2HttpMessageConverter.java:146)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.canRead(AbstractJackson2HttpMessageConverter.java:141)
at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:706)
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:770)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:594)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:357)
部署所有Qt插件(所有与所需DLL相关的插件)。
您可以使用windeployqt
等命令行修饰符更改windeployqt的行为方式(请参阅--no-plugins
)。
您可以在Qt文档中查看Qt for Windows - Deployment,特别是关于Qt Plugins的部分。