在 C/C++ for Windows 中开发时省略 msvcr100.dll

Omit the msvcr100.dll when developing in C/C++ for windows?

本文关键字:时省 开发 msvcr100 dll Windows C++ for      更新时间:2023-10-16

是否可以在 C/C++ 中为 Windows 进行开发,而不链接到 msvcr100.dll?

我知道这是Windows的标准c库,但是我想知道如果我没有安装Visual Studio或Redistributable软件包,计算机上的所有程序如何运行?

在"解决方案资源管理器"窗口中右键单击项目,依次单击"属性"、"C/C++"、"代码生成"、"运行时库"设置。 将其更改为/MTd。 对"发布"配置重复此操作,选取"/MT

">

您现在将链接 CRT 的静态版本,您使用的任何函数都将直接链接到 EXE,而不是在运行时从 msvcr100.dll 获取它们。 因此,您不再需要将 DLL 与程序一起部署。

如果创建自己的 DLL,请避免使用此选项。 然后,这些 DLL 和 EXE 使用完全相同的 CRT 非常重要,这样它们才能共享相同的 CRT 状态和相同的堆。 因为如果他们不这样做,那么你在传递C++对象或指针时会遇到令人讨厌的问题,这些对象或指针需要从一个代码块释放到另一个代码块。 如果您幸运的话,则为访问冲突,如果您不幸运,则为内存泄漏。

如果您将项目限制为仅使用 C 编程语言/库,那么您可以仅针对MSVCRT.lib的链接,该链接在自Windows XP SP3以来的任何Windows版本中都完全烘焙。

这意味着,您不能依赖于MSVCR100.DLL(或任何其他Visual Studio DLL(,而只能链接到MSVCRT中的标准C函数。顺便说一下,这种技术用于在Microsoft保护伞下开发的CoApp项目中,因此我认为在像您这样的情况下,这是一个很好的实践。

简单地说,下载Windows DDK并仅针对$(DDKInstallPath)libCrt$(DDKPlatform)msvcrt.lib链接

在Windows上,我怀疑是否有可能创建一个不以某种方式使用CRT的非平凡程序。

可以在

不链接到 msvcrXXX 的情况下使用 CRT.dll - 只需链接到静态库即可。 但要解决您的问题:

如果我没有视觉,计算机上的所有程序如何运行 Studio 或可再发行组件包已安装?

如果电脑上的程序链接到 msvcrtxxx.dll,则它们无法。 Sinmply,特定程序所需的红色可能已经在您的PC上安装了。 或者至少是程序所需的编辑部分。