Visual Studio 2010 MSVCR依赖项删除?

我试过谷歌,但我找不到解决scheme。 我想学习一些基本的C ++。 我写了一个简单的问候世界:

#include <stdio.h> int main() { printf("hello, world\n"); return 0; } 

它编译完美,一切! 伟大的我想,所以我装了我的虚拟机与XP,并没有安装服务包,然后试图运行它。 它告诉我,我需要MSVCR DLL。 有什么办法可以完全消除这种依赖? 我不想用dll填充程序。 我希望它完全消失。 是否可以制作和运行一个程序,将运行在XP和以上? 谢谢。

Solutions Collecting From Web of "Visual Studio 2010 MSVCR依赖项删除?"

在技​​术上可以删除C中的这种依赖,但我不确定在C ++中甚至是可能的。 无论如何, 我不会推荐它 。 CRT在幕后为你做了很多事情,其中​​大部分你不想以劣势来重塑自己。 对于初学者来说,运行时库实际上调用了你的main函数,并为全局和静态C ++对象调用构造函数和析构函数。

最好和最简单的解决方案可能是改变你的应用程序链接到运行时库的方式。 你有两个不同的选择:动态和静态。 动态链接更具有内存效率,这意味着您的应用程序将利用对库进行的任何错误修复。 它依赖于运行时DLL的存在,以便您的应用程序启动。 在构建的链接阶段,静态链接实际上将运行时库代码嵌入到应用程序中。 这意味着你可以在不分发DLL的情况下运行,但是有一些重要的注意事项。

对于简单的应用程序,这些警告不太可能是相关的。 更改项目选项中使用的链接样式:

  1. 在解决方案资源管理器中右键单击您的项目名称。
  2. 展开左侧树视图中的“C / C ++”选项,并选择“代码生成”项目。
  3. 在“运行时库”属性组合框中,选择“多线程”选项之一。
    调试版本应该使用“多线程调试”,而发布版本应该使用“多线程”。

请注意,由于您使用的是VS 2010,因此您仍然可以选择动态链接到运行时,并获得所有优势,无需在目标机器上运行CRT安装程序。 所有你需要的是可重新分配的DLL放在与应用程序可执行文件相同的文件夹中。 这使得部署(甚至测试)非常简单和直接。 你会发现这些库作为你的Visual Studio安装的一部分:

 \Program Files\Visual Studio x.0\VC\redist\ 

当然,CRT的调试版本永远不可再分发。 由于您不应该分发您的应用程序的调试版本,这不是一个问题。 确保你已经编译了一个“Release”版本(使用顶部工具栏中的下拉组合框),为此只需要在上述目录中找到的可再发行的库。


我不能使用XP附带的运行时?

Windows的任何版本都没有C运行库供您使用。 Windows本身确实依赖于一个C运行时库,但它部署了一个私人版本的库供自己使用。 应用程序不打算链接到它或以任何方式使用它。 您可以自行部署所有必需的依赖项,正如您已经注意到的那样,您不能假定目标机器已经安装了正确的版本。

您可以静态链接MS运行时,项目选项 – > C / C ++ – >代码生成 – >多线程(或调试配置的多线程调试)。 那么不需要DLL。

你可以删除恼人的运行时库,这样做:
project properties > linker > input > ignore all default libraries> yes

这会给你安静的几个问题,你需要处理,例如,浮点数不会工作,堆栈内存很小(约3K) ,没有内置的帮助缓冲区溢出等,你可以'使用标准库,不要将其粘贴到项目中。

这也会减小.exe的大小,几乎相当于手工制作的。