【发布时间】:2022-01-06 12:14:24
【问题描述】:
今天我构建了我的应用程序并使用 QtIF 打包了安装程序。它在我的电脑上运行良好,但抱怨在另一台电脑上缺少msvcp140_1.dll。
然后我运行find . -iname "msvcp140_1.dll",在我的电脑上发现超过五个不同的,我检查了md5sum。
然后我花时间在另一台计算机上尝试所有这些,并且似乎一切正常。不再抱怨缺少 DLL。
我应该如何在 DLL 之间进行选择?随便挑一个似乎太容易了。
有没有办法检查 DLL 以检查版本?
我相信 DLL 是我的应用程序中包含的另一个二进制文件的依赖项,而不是 QtIF 未能包含它。
【问题讨论】:
-
通常以
d结尾的Microsoft DLL 是调试DLL,不能分发。您应该构建一个发布版本,并在必要时在您的安装程序中包含 MS 可再发行包。 -
这是在发布模式下完成的。好吧,至少我的构建,也许依赖于
msvcp140_1.dll的二进制文件不是。而且“在您的安装程序中包含 MS 可再发行包”听起来很奇怪,在这种情况下,我必须要求用户安装一个额外的东西,并且我正在使用 QtIF 打包安装程序以简化最终用户的生活。我的计划是添加缺少的 DLL。 -
redist 包是正确的做法。 MS 将其作为开发 SDK 的一部分包含在内是有原因的。您的安装程序应该在安装之前运行 redist 作为其安装的一部分,并且大多数安装程序框架已经具有执行此操作的配置选项(安装作为清单的一部分指定的 redist 框架)。
标签: c++ windows qt dll dllimport