如果C++编译为机器代码,为什么我们需要安装'运行时'?

ICa*_*ode 4 c++ compilation

在编译过程结束时,程序位于机器代码中的.exe文件中.因此,如果不必安装像MS Visual Studio C++这样的东西,机器是否应该能够运行它?基本上,我正在制作一个mingw程序,并希望与其他人分享.我不明白为什么我不能只发送.exe文件.澄清将不胜感激.

das*_*ght 11

C++将您的代码编译为机器代码.如果您的程序是自包含的,那就是您所需要的.但是,更复杂的运行程序通常依赖于额外的编译代码,这些代码可通过库提供给您的程序.

通常,库有两种"风格" - 静态和动态.静态库被"编入"您的编译代码.这并不理想,因为多个程序包含相同的代码,导致代码重复.另一方面,动态库在使用它们的所有程序之间共享,从而更有效地利用空间.

安装运行时添加了动态库,供所有使用C++编译的程序使用.

  • *"如果你的程序像`cout <<一样简单",Hello,world!"`这就是你所需要的"*错误的例子,iostream依赖于很多通常由运行时库提供的东西. (6认同)
  • 请注意,运行时不仅仅是您可能调用的库函数,还包括编译器假定可用的库代码.你的程序并没有真正从`main`开始.编译器生成初始化事物和调用"main"的代码.即使您从未调用库函数,其中一些生成的代码也可能依赖于运行时. (5认同)
  • `cout`虽然取决于很多. (2认同)

Jes*_*uhl 5

您的程序可能会调用您自己未编写的标准库中的许多函数.您需要运行时库.您的代码可能还需要在main之前运行代码来设置C++程序所需的基本环境 - 运行时库为您执行此操作.在主要结束之后,需要根据标准进行各种清理(并且您的程序可能还取决于此),编译器运行时库会处理此问题.

您的代码不存在于真空中(它可以,但它不再是标准的托管C++程序).它依赖于并依赖于标准的运行时库来提供C++标准所说的环境.

  • @KidDoesCodingAnd和HasNoFriends你错过了"exe"不是一个独立的事实.它取决于其他东西,比如用于构建它的编译器的运行时库. (3认同)
  • 只有你静态地链接它们,如果没有,你仍然需要mingw的运行时库和它们一起. (2认同)