Qt 应用程序依赖于 dll(它不需要?)

Posted

技术标签:

【中文标题】Qt 应用程序依赖于 dll(它不需要?)【英文标题】:Qt application depends on dll's (which it doesn't need?) 【发布时间】:2016-07-25 23:18:29 【问题描述】:

我正在编译一个 Qt Webkit 应用程序,并且我知道 webkitwidgets 依赖于相当多的 dll,但是每个 Webkit 应用程序是否都需要所有这 20 多个 dll 来交付?或者我在这里做错了什么。这是运行我的程序所需的每个 DLL。

CFF Explorer 仅显示这 10 个 DLL:

该应用程序的大小约为 150mb,那么有什么方法可以减少这个吗?我想静态编译,但是你不能那样使用 webkit。

【问题讨论】:

不想臃肿?不要选择 Qt。 确实,但由于我选择 Qt 来开发它,我现在没有改变,我想我可以找到一种在我的应用程序中不使用 WebKit 但我需要 js 的方法:/ @GregHewgill 我需要 js 来与网页交互,我正在显示谷歌地图 150mb 对于具有自己嵌入式 Web 浏览器的应用程序来说并不是一个不合理的大小。在 Windows 上,您可以选择使用操作系统的本机 Internet Explorer 引擎(通过 IWebBrowser2 COM 接口),但这可能不值得头疼。 我想这还不错,我讨厌发布大量 DLL,但如果这意味着避免使用 Internet Explorer 引擎,那么我完全赞成 【参考方案1】:

打开你的 Qt 命令提示符。

mkdir installer
cd installer

将生成的 exe 文件复制到此文件夹。并运行:

windeployqt .

此命令将复制您需要的所有文件。使用 DependencyWalker 获取更多信息。 警告:一些 dll 被复制用于其他操作系统版本,所以不要删除它,特别是如果您希望您的应用程序从 Windows XP 兼容到 Windows 10。

【讨论】:

i.gyazo.com/57c1e4e342f506cad9c6e9adf09809de.png 我之前试过了,但还是一样的deps 我建议使用安装程序附加所有文件。来自官方文档:doc.qt.io/qt-5/windows-deployment.html“他的 Windows 部署工具旨在自动创建包含从该文件夹运行应用程序所需的依赖项(库、QML 导入、插件和翻译)的可部署文件夹的过程。它创建Windows 运行时的沙箱或 Windows 桌面应用程序的安装树,可以轻松捆绑到安装包中。该工具可以在 QTDIR/bin/windeployqt 中找到。" 仍然包含很多不必要的文件。例如。如果您使用的是 SQLite,windeployqt 将复制所有 sql 驱动程序。仅保留 SQLite 驱动程序并删除其余驱动程序。 使用微软的ProcessExplorer获取运行过程中使用的DLL文件列表。 filehippo.com/es/download_process_explorer

以上是关于Qt 应用程序依赖于 dll(它不需要?)的主要内容,如果未能解决你的问题,请参考以下文章

C++、Qt - 如何摆脱 dll 依赖项?

Qt打包部署程序自动查找依赖DLL工具windeployqt

如何判断一个 exe 是不是依赖于某些 Qt 图像格式的 dll?

减小 Qt GUI 应用程序的大小

QT学习笔记—— QT程序自动寻找依赖的DLL,用来打包发布

QT 中的延迟 DLL 加载