我有一个用QT编写的应用程序。以前,我使用的是Visual Studio 2012和Qt 5.3.1,之后我最近升级到了Visual Studio 2015和QT 5.6。我以前会在安装过程中提供msvcp110和msvcr110(我知道这不是最佳实践,但我放弃了)。
升级后,由于VS 2015的更改,我现在必须安装VC ++2015。我不介意这些更改,并且目前提供要安装的redist软件包。
我面临的问题是,我确实也必须提供VC ++ 2012,并且最近在Windows 8.1 Pro中运行该软件,还被要求提供VC ++ 2013(从未使用VS2013进行编译)。该诊断来自于Dependency Walker和Google。不仅如此,我还必须安装VC ++的所有3个版本的x86和x64才能启动该软件(甚至说不清)。
现在仅使用Visual Studio 2015时为什么需要VC ++ 2012和2013?
如何摆脱其他重做程序包?是我写的一些依赖代码吗?如果可以,我能找到什么机会吗?
当我严格在64位编译器中进行编译时,为什么需要同时提供32位和64位版本?
没有依赖行者的任何诊断方法?当应用程序完全拒绝启动时,是否会有一些日志记录?
很长的道歉,但是这里的任何光线都可以恢复我的理智。
提前致谢。
最佳答案
您正在使用链接到较早运行时的DLL。您可以在开发计算机上使用Dependency Walker进行跟踪,而无需为此在客户计算机上安装任何工具。
将应用程序附带的所有文件迁移到针对VC ++ 2015构建的版本。
您没有提供任何可以揭示原因的细节。
对于除语言运行库以外的DLL,可以使用延迟加载,然后能够捕获加载库失败的陷阱。但是,您不能有效地延迟加载msvcr * .dll。一种选择是创建一个非常瘦的EXE,它根本不使用任何支持DLL(使用纯Win32 API或静态链接运行时),除了安装错误处理程序之外,什么也不做,然后加载您现在的主程序,形式为DLL。应该使用延迟加载链接或LoadLibrary()
+ GetProcAddress()
完成主程序DLL的加载-任一个都会捕获错误。该主程序DLL可以像往常一样自由导入运行时DLL。
关于c++ - VC++可再发行2012或2013或2015?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37302704/