我有一个QT应用程序,它使用依赖于2008 C ++ MSVCR90.dll的LIB。 当我部署我的应用程序时,在某些计算机上出现以下错误:
我该如何解决这个问题? 有人提到我,如果我包含一个清单文件,这应该会有所帮助。所以我准备了以下清单文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
<。>在.pro文件中我添加了以下内容:
CONFIG += embed_manifest_exe
win32:CONFIG(release, debug|release) {
QMAKE_POST_LINK = $$quote(C:/Program Files (x86)/Windows Kits/8.1/bin/x64/mt.exe -nologo -manifest \"ISHEmulauncher.exe.manifest\" -outputresource:$(DESTDIR_TARGET);1)
}
else:win32:CONFIG(debug, debug|release) {
QMAKE_POST_LINK = $$quote(C:/Program Files (x86)/Windows Kits/8.1/bin/x64mt.exe -nologo -manifest \"ISHEmulauncher.exe.manifest\" -outputresource:$(DESTDIR_TARGET);1)
}
但是创建的清单与我准备的清单不同,并且不包括VS90依赖关系,因此我仍然面临同样的错误。
有什么建议吗? 谢谢!
答案 0 :(得分:1)
Redistributables非常讨厌管理。通常我需要做的是在每个部署机器上运行MSVC C ++可再发行组件安装程序(作为安装过程的一部分)以避免此错误。
这篇文章可能会对情况有所了解:
http://msdn.microsoft.com/en-us/library/ms235299(v=vs.90).aspx
https://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html#application-dependencies
我试图从我的开发机器上获取正确的dll,然后将其部署到我的应用程序文件夹中。如果您不介意安装可再发行软件包的安装程序中有另一个步骤,则以下链接应该有所帮助。
http://www.microsoft.com/en-us/download/details.aspx?id=29
http://www.microsoft.com/en-us/download/details.aspx?id=26368
此外,如果您的应用程序编译为32位,则只需要32位可再发行组件。如果您在x64中编译了应用程序,则需要64位可再发行组件。
相关:
希望有所帮助。
答案 1 :(得分:0)
我通过取消选中QT中的“阴影构建”选项解决了这个问题。 之后,我没有忽略我定义的清单文件,并正确加载了库。