用VS2008编译的C++应用程序在其他计算机上无法运行

3
我使用Visual Studio 2008和Visual C++语言创建了一个wn32项目,它使用ws2_32.lib库并以Release模式编译。在同一台电脑上运行良好,但当我将exe文件复制到其他没有安装Visual Studio的计算机上时,它无法运行。出现以下错误信息:“This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.” 然而,如果我使用DEV C++编译我的应用程序,则生成的可执行文件更大(738KB),与Visual Studio 2008可执行文件(9.5 KB)相比。但是,DEV C++可执行文件可以在其他计算机上运行。我已将ws2_32.lib库添加到项目的链接器属性中,在Additional Dependencies字段中。如何修复此问题以使其与Visual Studio 2008兼容? 我的代码如下:http://www.stan.com.mx/yupi/udpserver.cpp

感谢大家提供的宝贵信息。 - kiewic
我正想问同样的问题。谢谢你的辛勤工作。 - zeroDivisible
4个回答

11
几乎肯定的问题是另一台计算机没有安装C++ CRT版本9。在VS2008中编译CRT的默认设置是动态链接而不是静态链接。如果你想使用真正的设置项目部署你的程序,你需要包含CRT可再分发文件。但是,如果你想进行 XCOPY 部署,请按照以下页面上的步骤操作。 http://msdn.microsoft.com/en-us/library/ms235291.aspx

4

1
您的程序可能缺少某些外部依赖项。请检查项目设置,看看是否动态链接到MFC等。您也可以运行Depends实用程序来检查缺失的依赖项。

1

我同意JaredPar的观点。你使用VS2008构建的应用程序是使用动态链接,而DEV C++是静态链接,因此大小更大,这就是为什么一个可以工作而另一个不能的原因。

但是,如果你有一个纯Win32应用程序项目(并且你不想/需要使用安装程序进行分发),你可能能够通过让VS2008为你静态链接(如果只是缺少标准库)来在另一台机器上运行它。我手头没有VS2008的副本,所以我将描述如何在VS2005中执行它,并希望它能够转换过来。

  1. 打开项目的配置属性(右键单击项目名称,然后从菜单中选择“属性”)
  2. 展开“配置属性”,然后展开“C/C++”,然后单击“代码生成”
  3. 在“运行时库”项下,对于你特定的配置,选择非DLL版本的库,即对于调试构建,你需要“多线程调试(/MTd)”,对于发布构建,你需要“多线程(/MT)”

尝试并查看是否有效。现在,由于库已经静态链接,你的最终二进制文件会变得更大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接