在VS中编译C++而不需要在运行时使用MSVCP120D.dll

dlk*_*ulp 12 c++ dll visual-studio-2013

我正在尝试制作一个可以在任何Windows机器上运行的二进制文件,而无需安装可视化c ++的东西(我假设那是MSVCP120D.dll,但是我的搜索并不是很有效,这实际上是什么).我为一个任务做了一个游戏,并希望有其他人(非开发人员没有安装VS的东西),帮我测试但是他们不断收到错误,说上面的dll丢失了.我没有使用任何Visual C++的东西,并设置了/ Za标志,以确保它只是ANSI C++.Visual Studio是否支持编译ANSI C++,如果是这样,我如何使它不使用Visual C++的东西,如果它不支持这个我应该使用什么编译器?

Joh*_*ing 17

正如您在此处看到的,MSVCP DLL是C++标准库的平台实现.简而言之,这意味着您无需分发应用程序而无需这些库提供的"内容".无论平台如何,所有编译器都需要某种标准库的实现.通常,这以库的形式分发.

但是,您可以分发您的应用程序,以便"东西"直接内置到您的程序中,而不是在单独的DLL中提供.为此,您必须将应用程序静态链接到标准库.

有几种方法可以实现这一目标.一种方法是在项目设置中.在"Project">"Configuration Properties">"C/C++ Code Generation">"Runtime Library"中,选择"Multithreaded(/ MT)"而不是"Mutithreaded(Static)".


顺便说一下,上面提到的"MSVCP120D.dll"中的"D"表示"调试".这意味着您正在尝试分发程序的调试版本.你应该(几乎)永远不要这样做.相反,分发版本构建.


pau*_*ulm 6

你有三个选择(按照我推荐的顺序):

  1. 不要静态链接,而是让想要运行游戏的人安装visual studio可重新分发的软件包.这里是32位VC 2010版本:http://www.microsoft.com/en-us/download/details.aspx?id = 5555

  2. 静态链接CRT(运行时不想要的DLL)请参阅此处了解详细信息:如何使用Visual Studio Express 2005创建完全静态链接的.exe?

  3. 构建一个甚至根本不使用CRT的应用程序.在这里,您必须实现自己的调用HeapAlloc()的operator new,以及调用HeapFree()的operator delete,这是一个有趣的挑战;).要执行此操作,请告知链接器忽略所有默认库.