C++;需要运行时? 为什么有些C++项目需要安装运行时包,而其他的则不需要?

C++;需要运行时? 为什么有些C++项目需要安装运行时包,而其他的则不需要?,c++,deployment,runtime,C++,Deployment,Runtime,编辑:如何使项目在没有运行时的情况下工作?一些项目将被静态链接,而另一些项目将依赖于在运行时加载的动态库。要静态链接您自己的项目,您需要更改您的项目配置-如何更改取决于您使用的编译器/链接器和/或IDE。我认为这是指VS2005 service pack 1运行时。由于某些原因,MS向其添加了一些不向后兼容的功能,因此任何使用VS2005sp1构建的应用程序都需要运行时配合使用。一些应用程序是与系统库链接构建的,这是动态链接的程序。 其他程序将库的代码包含到可执行文件中,这是静态链接程序 动态链

编辑:如何使项目在没有运行时的情况下工作?

一些项目将被静态链接,而另一些项目将依赖于在运行时加载的动态库。要静态链接您自己的项目,您需要更改您的项目配置-如何更改取决于您使用的编译器/链接器和/或IDE。

我认为这是指VS2005 service pack 1运行时。由于某些原因,MS向其添加了一些不向后兼容的功能,因此任何使用VS2005sp1构建的应用程序都需要运行时配合使用。

一些应用程序是与系统库链接构建的,这是动态链接的程序。 其他程序将库的代码包含到可执行文件中,这是静态链接程序

动态链接的优点:

  • 可执行程序的较小尺寸
  • 如果共享动态链接库,则内存消耗更少
  • 更好的性能
动态链接的缺点:

  • 对库的依赖
  • 部署更加困难
静态链接的优点:

  • 没有依赖关系
  • 更容易部署应用程序
静态链接的缺点:

  • 可执行文件更大

要获取静态项目,您需要在项目属性中设置选项。

如果您使用的是链接为DLL而不是静态库的标准C/C++库,则需要安装运行时包。因此,避免这种情况的一种方法是静态链接标准C/C++库(C++项目设置)。在你的情况下,这可能是可能的,也可能是不可能的

如果没有,您可以使用VisualStudioDistribution中的dependency walker工具来识别应用程序所需的DLL,并将它们放在可执行文件附近


在VisualStudio2005及更高版本中,您应该注意的是,二进制文件的清单可能会(而且可能会:)使您的生活更加艰难。特别是,由于VisualStudio 2005的SP1也改变了C++库的版本,以及清单。

如何使我的程序在没有运行时安装的情况下运行。要做到这一点,请将其静态链接起来。记住,这会降低向前兼容性,这意味着您将无法利用Windows更新来库。如果存在与安全相关的功能,这一点很重要。2005年之后的所有visual studio版本都是如此。动态链接库通常会为全局变量(包括vtables)添加一级间接寻址。所以我想说,在某些特殊情况下(我想到的是内存受限),它们的性能“更好”