需要C++运行库?

3
为什么有些C++项目需要安装运行时包,而其他一些则不需要?
编辑:如何使项目在没有运行时的情况下正常工作?
4个回答

8

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


如何使我的程序在未安装运行时的情况下正常工作? - Ivan Prodanov
为此,静态链接它-请记住这会降低向前兼容性,并意味着您将无法利用Windows更新库,如果存在安全相关功能,则这一点非常重要。 - 1800 INFORMATION

2
一些应用程序是链接到系统库的,这些是动态链接程序。 其他程序将库的代码包含在可执行文件中,这些是静态链接程序
动态链接的优点:
  • 程序可执行文件大小较小。
  • 如果动态链接库是共享的,则内存消耗较少。
  • 性能更好。
动态链接的缺点:
  • 依赖于库。
  • 部署更加困难。
静态链接的优点:
  • 没有依赖关系。
  • 应用程序更容易部署。
静态链接的缺点:
  • 可执行文件更大。
要获得静态项目,您需要在项目属性中设置选项。

动态链接库通常为全局变量(包括虚函数表)添加了一层间接性。因此,我会说它们在某些特殊情况下具有“更好的性能”(例如受限内存)。 - coryan

1

我认为这是指VS2005服务包1运行时。由于某种原因,微软添加了一些不向后兼容的功能,因此使用VS2005sp1构建的任何应用程序都需要与之配套的运行时。


这适用于2005年之后的所有Visual Studio版本。 - 1800 INFORMATION

1

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

如果不行,您可以使用Visual Studio分发中的依赖项工具来识别应用程序所需的DLL,并将它们放在可执行文件附近。

您应该注意的是,在Visual Studio 2005及更高版本中,二进制文件的清单可能会使您的生活更加困难。特别是自Visual Studio 2005 SP1以来,C++库的版本和清单也发生了变化。


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