VC ++ Redistributable 2012或2013或2015?

时间:2016-05-18 14:33:31

标签: c++ visual-studio qt visual-c++ visual-studio-2015

我有一个用QT编写的应用程序。以前我使用的是Visual Studio 2012和Qt 5.3.1,之后我最近升级到Visual Studio 2015和QT 5.6。我以前提供msvcp110和msvcr110作为安装的一部分(我知道这不是最好的做法,但我逃脱了它)。

升级之后我不得不安装VC ++ 2015,因为VS 2015发生了变化。我不介意这些变化,并且目前提供redist软件包。

我面临的问题是,我确实必须提供VC ++ 2012,并且最近在Windows 8.1 Pro中运行该软件,我也被要求提供VC ++ 2013(从未使用VS2013进行编译)。诊断来自依赖沃克和谷歌。不仅如此,我必须安装所有3个VC ++版本的x86和x64才能启动软件(甚至不开始诚实)。

  1. 当我现在只使用Visual Studio 2015时,为什么需要VC ++ 2012和2013?
  2. 如何摆脱其他redist包裹?是我编写的一些依赖的代码吗?如果有,我有机会找到它吗?
  3. 当我在64位编译器中严格编译时,为什么需要同时提供32位和64位版本?
  4. 没有依赖性步行者的任何诊断方法?当应用程序拒绝启动时,是否可以进行一些日志记录?
  5. 长篇大论道歉,但这里的任何亮点都可以恢复我的理智。

    提前致谢。

1 个答案:

答案 0 :(得分:2)

  1. 您正在使用链接到旧运行时的DLL。您可以在开发机器上使用Dependency Walker来跟踪它,不需要在客户机器上安装任何工具。

  2. 将应用程序附带的所有文件迁移到针对VC ++ 2015构建的版本。

  3. 您没有提供任何可以揭示原因的详细信息。

  4. 对于语言运行时库以外的DLL,您可以使用延迟加载,然后能够捕获加载库的失败。但是你不能有效地延迟加载msvcr * .dll。一种选择是创建一个非常薄的EXE,它根本不使用任何支持DLL(使用纯Win32 API,或者静态链接运行时)除了安装错误处理程序然后加载现在在表单中的主程序时什么也不做一个DLL。加载主程序DLL应该使用延迟加载链接或LoadLibrary() + GetProcAddress() - 任何一个都将允许捕获错误。这个主程序DLL可以像往常一样自由导入运行时DLL。