gpt4 book ai didi

c++ - VC++ 可再发行版 2012 或 2013 或 2015?

转载 作者:行者123 更新时间:2023-11-28 02:06:18 25 4
gpt4 key购买 nike

我有一个用 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。不仅如此,我还必须安装所有 3 个版本的 VC++ 的 x86 和 x64 才能启动软件(老实说,我什至不会开始)。

  1. 为什么我现在只使用 Visual Studio 2015 而需要 VC++ 2012 和 2013?
  2. 我如何摆脱其他 redist 软件包?我写的一些代码是依赖的吗?如果是,我有机会知道吗?
  3. 为什么我在 64 位编译器中严格编译时需要同时提供 32 位和 64 位版本?
  4. 没有 dependency walker 有什么诊断方法吗?当应用程序根本拒绝启动时,是否可以进行一些日志记录?

很抱歉发了这么长的帖子,但这里的任何光线都可以让我恢复理智。

提前致谢。

最佳答案

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

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

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

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

关于c++ - VC++ 可再发行版 2012 或 2013 或 2015?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com