繁体   English   中英

独立VS 2010 C ++程序

[英]Standalone VS 2010 C++ Program

自从我使用VS 2010和C ++以来已经有很长时间了,而当我重新使用它时,我遇到了去年困扰我的同样问题:我编译的exe不能很好地运行没有正确的C ++运行时的较旧计算机。 我什至不知道该给他们什么链接,当他们遇到一个错误消息“您的计算机上缺少MSVCR100.dll导致程序无法启动,请告诉我,然后告诉他们安装 。尝试重新安装该程序来解决此问题”。单击“确定”关闭该应用程序。”) 因此,我将代码生成设置为/ MT并禁用了很多选项,并尝试使用很多选项,但结果仍然相同。

我的问题是:是否可以提供完整的VS 2010 C ++分发列表,并告诉他们进行安装,以便我在VS 2010上编译的所有C ++程序都可以在Windows XP上运行,甚至更好,这是通用的一种方法一个独立的exe,包含所有需要的工作,并且不依赖DLL? 我在想链接到包含exe引用的所有内容的库。 如果有帮助,我将同时为x64和x86进行构建。

PS清单文件有什么问题,我应该包括吗?

最简单的方法是仅安装VC ++可再发行组件包。 它具有x86x64版本。

首先,在我实际提供详细信息之前:


警告

如果执行此操作,则由于以下两个原因会造成问题:

  1. 如果MSVC运行时中存在安全性或其他错误,而您采用这种方法,则会将它们烘焙到您的应用程序中,这意味着您需要重新分发。 首选DLL,因为从理论上讲,人们使用系统更新,这意味着所有错误都会得到解决。
  2. 您编译到exe中的其他所有内容也都需要这样做。 如果不这样做,最终将得到两个版本的代码,并且所使用的任何内容都不会链接。

一种可能的解决方案是使用cl.exe选项(C / C ++编译器设置) /MT将MSVC运行时烘焙到您的应用程序中,这意味着静态链接的C / C ++运行时的多线程版本。 就像我说的,如果您尝试链接本身动态链接到运行时的内容,那么最终将陷入混乱。 另外,正如我所说,这是一个额外的安全风险因素,请记住这一点。

其他选项是编写一个安装程序,该安装程序可以下载适当的运行时,也可以包括所需的DLL。

如果您使用的运行时功能超出了Windows的特定版本(通用语句,但是确实发生了),那么您应该能够使用适当的C运行时使用Windows SDK来定位Windows的各种版本。

http://www.microsoft.com/downloads/zh-CN/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84

Google文字:Visual Studio C ++ Redist

不要静态链接到运行时。 如果您将任何类型的dll用于其他目的,则不要这样做。 它介绍了您可能不想惹的堆管理问题。

打开项目的属性对话框,然后选择配置属性| C / C ++ | 代码生成。 默认设置为多线程DLL。 将其更改为“多线程”,您将使用静态链接的运行时构建和.EXE。不要忘记对调试版本执行相同的操作。

如果您使用的是MFC或ATL,则需要导航至“配置属性” |“配置”。 常规,并将“使用MFC”或“使用ATL”设置为静态链接。

注意:如果您静态链接运行时,则必须确保要链接的任何其他库也都以静态方式链接。 否则,您将在内存中获得两个运行时副本,每个副本都有其自己的堆,并且当使用一个运行时的代码尝试释放另一个运行时分配的对象时,将会发生不好的事情。

这个先前的答案应该适用于VS2010。 我仍然使用VS2005进行构建,但是我所有的应用程序都使用静态CRT,其唯一原因是能够同时在新旧计算机上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM