gpt4 book ai didi

visual-studio - 为什么我的应用程序需要 Visual C++ Redistributable 包

转载 作者:行者123 更新时间:2023-12-03 06:18:50 25 4
gpt4 key购买 nike

我正在 Visual Studio 中编写一个简单的 C++ 应用程序。它还有一个安装项目。它在我的开发计算机上运行良好,但是当我在用户计算机上安装此应用程序时,它需要 Visual C++ Redistributable Package。我想知道为什么我的应用程序需要 C++ Redistributable?标准 C++ 运行时库随 Windows 一起提供,不是吗?

最佳答案

Microsoft 随大多数 32 位 Windows 版本一起提供的 C 运行时库的唯一版本是 msvcrt.dll。该库提供了 C 和 C++ 程序所需的一组典型库函数。其中包括字符串操作、内存分配、C 风格输入/输出调用等。

Visual Studio 6.0 的编译器链接到该库,因此,如果您在 VS 6.0 中进行开发,则在大多数用户的计算机上不会遇到任何问题。

但是,如果您在 VS 2005、VS 2008、VS 2010、VS 2012、VS 2013 或 VS 2015 中进行开发,则必须随应用程序一起分发其他 C 运行时库。这是因为他们的编译器链接到 msvcrt80.dllmsvcrt90.dllmsvcrt100.dllmsvcrt110.dllmsvcrt120.dllmsvcrt140.dll,它们不随 Windows 一起提供。

解决方案:

  1. 可能的解决方案是与运行时库静态链接,但如果您的文件中同时存在 .exe.dll,则可能会导致很多问题。应用。 不要这样做

    更具体地说,我将允许自己引用 this 的一部分答案:

    Using /MT is risky if you create DLLs as well as an EXE. You'll end up with multiple copies of the CRT in your program. This was especially a problem with earlier versions of VS where each CRT would get its own heap, not so much with VS2012. But you can still have ugly runtime problems when you have more than one "errno" variable for example. Using /MD is highly recommended to avoid such lossage.

  2. 另一种可能的解决方案是要求在用户计算机上安装适当的 Microsoft Visual C++ Redistributable 软件包。

    可以通过在安装项目的先决条件属性中指定此要求来完成。

  3. 此外,您还可以通过在安装项目中包含适当的“merge module ”来分发运行时dll。在这种情况下,请不要忘记添加适当的“策略合并模块”,以避免由于运行时版本不正确而导致的错误。

  4. 最后,您可以将所需的 DLL 放在应用程序安装的同一文件夹中。

进一步阅读:

关于visual-studio - 为什么我的应用程序需要 Visual C++ Redistributable 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16167305/

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