gpt4 book ai didi

windows - 我应该使用我的应用程序重新分发 msvcrt.dll 吗?

转载 作者:可可西里 更新时间:2023-11-01 12:09:12 25 4
gpt4 key购买 nike

如果某些应用程序的库动态依赖于 msvcrt.dll,我是否应该使用我的应用程序重新分发 msvcrt.dll 并使用私有(private) dll? IE。系统的 msvcrt.dll(dll hell)是否可能存在任何不兼容问题?应用程序针对 Windows Server 系统。

最佳答案

msvcrt - 是 Microsoft Visual C++ 运行时的动态库。

在 Windows 中使用 C 运行时有两种选择:

  1. 与静态运行时库链接。
    对 cl.exe 使用 /MT/MTd 选项。在这种情况下,您将不依赖于 msvcrt DLL,因此您不必重新分发它。在 Visual Studio 中,右键单击项目或解决方案,属性 > C/C++->代码生成->运行时库分别使用多线程多线程调试。这是更简单的方法。缺点是生成的可执行文件更大。

  2. 链接到动态 C 运行时库。
    您将对 cl.exe 使用 /MD/MDd 选项。
    在 Visual Studio 中,右键单击项目或解决方案,属性 > C/C++->代码生成->运行时库分别使用多线程动态链接多线程动态链接调试。这会产生更小的 EXE,但缺点是您必须在安装应用程序时安装所需的 MSVCRT。


每个版本的 VC++ 编译器都附带一个版本的 C 运行时 (CRT)。 Visual Studio 2005 附带 v8 编译器和 v8 CRT。 v8 的实际 DLL 是 msvcrt80.dll。对于 VS2008,它是 v9,动态 CRT 是 msvcrt90.dll。但是,CRT 的更新和修补比 C/C++ 编译器更频繁。开发人员可以下载更新的 CRT,并据此进行构建。

如果您使用动态 CRT 库进行编译,您必须从 microsoft.com 下载所需运行时版本的可再分发包,并在您的应用程序安装期间执行(可能是静默的)安装.


在 VS2005 之前,开发人员构建的应用程序依赖于 Windows 操作系统中的 MSVCRT。这将提供 DLL(小图像大小)的好处,同时不会招致在应用程序安装中传送 CRT DLL 的要求。在 Windoes 2000 之前,开发人员甚至会在\Windows 安装文件夹中安装一个新的 MSVCRT.dll。但是,在许多应用程序和操作系统之间共享 CRT 被证明是一个非常糟糕的主意。在 WinXP SP2 中,Windows 附带的 CRT 发生了重大变化,任何依赖该版本 CRT 的应用程序都面临崩溃的风险。

此时 Microsoft 告诉开发人员,Windows 附带的 MSVCRT.dll 是操作系统的一部分,可以随时进行维护或修补。不支持针对它构建应用程序。因此应用程序应使用上述方法之一。

引用资料:

关于windows - 我应该使用我的应用程序重新分发 msvcrt.dll 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073509/

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