7

Is it possible to develop in C/C++ for windows and not to link against the msvcr100.dll?

I understand that this is the standard c library for windows, but I was wondering how all the programs on my computer could run if I hadn't Visual Studio or the Redistributable package installed?

4

3 回答 3

16

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

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

如果您创建自己的 DLL,请避免使用此选项。然后,这些 DLL 和 EXE 使用完全相同的 CRT 就变得很重要,因此它们将共享相同的 CRT 状态和相同的堆。因为如果他们不这样做,那么在将需要从一大块代码释放到另一块代码的 C++ 对象或指针传递时,您将遇到麻烦。如果你幸运的话是 AccessViolation,如果不是的话,就是内存泄漏。

于 2012-05-17T13:33:24.050 回答
2

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

这意味着,您只能链接到 MSVCRT 中的标准 C 函数,而不是依赖于 MSVCR100.DLL(或任何其他 Visual Studio DLL)。顺便说一句,这种技术用于微软旗下开发的CoApp项目,所以我认为在你这样的情况下它是一个很好的实践。

只需下载Windows DDK并仅链接$(DDKInstallPath)lib\Crt\$(DDKPlatform)\msvcrt.lib

于 2012-05-17T14:18:30.420 回答
1

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

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

如果我没有安装 Visual Studio 或 Redistributable 包,我计算机上的所有程序如何运行?

如果您 PC 上的程序链接到 msvcrtxxx.dll,那么它们不能。Sinmply,可能在您出现之前,特定程序所需的 redist 就已经安装在您的 PC 上。或者至少是程序所需的 redist 部分。

于 2012-05-17T12:25:22.137 回答