C++ 在C/C+中开发时省略msvcr100.dll+;窗户?

C++ 在C/C+中开发时省略msvcr100.dll+;窗户?,c++,c,winapi,visual-c++,msvcr100.dll,C++,C,Winapi,Visual C++,Msvcr100.dll,是否可以使用C/C++for windows进行开发,而不链接到msvcr100.dll 我知道这是windows的标准c库,但我想知道,如果没有安装Visual Studio或可再发行软件包,我的计算机上的所有程序如何运行?在windows上,我怀疑是否有可能创建一个以某种方式不使用CRT的非平凡程序 可以在不链接到msvcrXXX.dll的情况下使用CRT——只需链接到静态库即可。但为了回答你的问题: 如果我没有视频,我电脑上的所有程序怎么能运行 是否安装了Studio或可再发行软件包 如果

是否可以使用C/C++for windows进行开发,而不链接到msvcr100.dll


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

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

可以在不链接到msvcrXXX.dll的情况下使用CRT——只需链接到静态库即可。但为了回答你的问题:

如果我没有视频,我电脑上的所有程序怎么能运行 是否安装了Studio或可再发行软件包


如果您电脑上的程序链接到msvcrtxxx.dll,则它们不能。很可能,在你出现之前,你的电脑上就已经安装了一个特定程序所需的redist。或者至少是程序所需的redist部分

在“解决方案资源管理器”窗口中的项目上单击鼠标右键,“属性”、“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函数。顺便说一下,它是在微软伞下开发的项目中使用的,所以我认为在你的这种情况下它是一个很好的实践。

简单地,只下载与链接<代码> $>(DDKSTSTALLATION)LIB CRT \$(DDKPaltSub)\MVCRT.LIB < /Calp>

您可以开发其他像英特尔或GCC的C++库,但是如果您动态链接到库,并且在运行时不可用,程序就不会运行。静态链接会起作用。油漆等链接到哪个库?或者它们都与使用的c库静态链接?Paint是针对较旧的msvcr开发的,默认情况下已安装到windows中。您可以使用
depends.exe
@Steve检查程序的动态(DLL)依赖关系。谢谢是的,我的可执行文件始终依赖于msvcrXXX。谢谢。这确实非常有趣,而且更符合我的要求。这个库是一个未记录的实现细节。不过,由于许多程序错误地依赖于它,你可能会指望微软在将来支持它。但这种支持将受到限制,例如,他们不打算将其移植到64位,因为从来没有64位VC6。@MSalters这完全不是真的。安装Windows DDK并自行检查。DDK确实提供msvcrt.lib的amd64、i386和ia64版本。DDK没有死!我也为我的项目做了这件事——链接WDK 7.1和MSVCRT.DLL-github.com/malkia/ufo——其他做这件事的人是XChat WDK——现在严重的错误已经不那么常见了,但拥有20个DLL,每个DLL有一个CRT副本,仍然是对磁盘空间、内存和CPU缓存的浪费。出于某种原因,这并不总是有效。例如,如果你已经编译了项目至少一次,你就不能像那样链接它。这是模糊的,但是当你改变它时,不要期望增量链接起作用。没问题。