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

Posted

技术标签:

【中文标题】如何判断一个 exe 是不是依赖于某些 Qt 图像格式的 dll?【英文标题】:How can you tell if an exe depends on certain Qt image format dlls or not?如何判断一个 exe 是否依赖于某些 Qt 图像格式的 dll? 【发布时间】:2017-08-24 14:02:45 【问题描述】:

qgif4.dll、qjpeg4.dll、qtiff4.dll都实现了这些功能:

qt_plugin_instance
qt_plugin_query_verification_data

dumpbin 可能不够聪明,无法查看 qgif4.dll、qjpeg4.dll、qtiff4.dll 中是否有任何函数可以被调用并因此被应用程序需要。 准确地说:我运行了dumpbin,它说我们的exe 不依赖于上述任何dll,但我的经理仍然怀疑是否需要qjpg4.dll。有没有办法在发货前确定?

当然,我们需要提供应用所需的所有 dll。但我们只想提供必需的内容,因为该应用程序必须在具有大小限制的精简嵌入式 Windows XP 版本上运行:所有内容都从虚拟 RAM 磁盘运行。

【问题讨论】:

在Windows中,我个人使用dependencywalker.com。它递归地扫描二进制文件的依赖项。这可以让您准确地看到您需要什么。请注意,这不适用于您在运行时手动加载的库,例如,如果您使用 WINAPI 函数 LoadLibrary。 依赖walker对此毫无用处。 【参考方案1】:

这些是 Qt 插件。它们由 Qt 动态加载,具体取决于您在 Qt 代码中使用的图像格式。

通过查看使用 Qt 代码加载的图像格式,您应该能够推断出需要哪些图像格式。

您也可以在 Process Monitor 运行时运行您的程序。它将跟踪所有已加载的 DLL,因此您将知道这些加载的 DLL 是必需的(您在该会话期间运行的代码需要此方法。此方法不能保证您未执行的程序的某些其他代码该会话不依赖于其他图像插件)

【讨论】:

以上是关于如何判断一个 exe 是不是依赖于某些 Qt 图像格式的 dll?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断事件是不是来自 C# 中的用户输入?

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

如何使用 Qt 发送带有图像附件的电子邮件?

Qt:如何在特定时间内冻结某些按钮?

如何判断某个对象的类型继承于某一接口或父类

如何用Qt自动拷贝exe依赖的dll