C++程序需要运行什么?

Arm*_*yan 13 c++ dependencies operating-system runtime

这个问题一直困扰着我一段时间.让我们考虑以下两个程序:

#incude <iostream>
int main()
{
   std::cout << "Hello, World!";
}
Run Code Online (Sandbox Code Playgroud)

int main()
{
   int x = 5;
   int y = x*x;
}
Run Code Online (Sandbox Code Playgroud)
  1. Windows:第一个例子,当然需要一些系统.dll用于控制台.我明白那个.那第二个怎么样?它需要运行吗?一些运行时库?那么,运行时库实际上做了什么?
  2. Linux:不知道,你能开导我吗?

我知道这取决于编译器和操作系统,但我需要一般答案或特定的例子.TIA.

pax*_*blo 7

作为一般答案,第一个将需要C++运行时库(您需要支持标准库调用的东西).这些形成了语言支持库之间的各种接口,而这些接口又知道如何在给定环境中实现它们的功能.

第二个不使用运行时库.它将使用C启动和终止代码(初始化和拆除C环境),但它是关于这些是否被视为运行时库的一部分的讨论点.如果你认为它们是一个部分,那么,是的,它们将被使用.它可能只是一个非常小的部分,因为启动代码和流内容之间的大小通常有很大差异.

您可以静态链接代码(在链接时绑定)与运行时库或动态链接(以便在加载时完成实际绑定).这对Windows和Linux都是如此.

  • @Alf,你没看到下面的文字:`"除了C启动代码......"`?这也可能是一个定义问题.启动和终止代码_may_在CRT中,但我已经看到很多情况下,它是独立的`start.o`,与标准库无关.我会澄清一下. (2认同)

Seb*_*zus 7

对于Windows应用程序,您可以使用Dependency Walker查看所有依赖项.


And*_*rey 1

Windows 上的 C 程序需要 Windows 附带的 CRT 库。C++ 有时需要所谓的“C++ 可再发行组件”。它们可以通过链接嵌入到应用程序中,但这将使 EXE 变得更大。

  • @Armen Tsirunyan:至少C++标准库中与C不通用且不是模板的所有部分,以及某些C++魔法的所有支持代码(例如异常、RTTI等)。 (2认同)