gpt4 book ai didi

c++ - 用 C++ 编写的程序如何工作?

转载 作者:IT老高 更新时间:2023-10-28 22:10:02 26 4
gpt4 key购买 nike

当我们运行一个java程序时,如果没有安装JRE,它就不起作用。
我发现大多数著名的应用程序(例如 Google chrome 浏览器)都是用 C++ 编写的。那么windows如何在没有任何C++运行时环境的情况下运行这样的程序呢?安装时到底发生了什么?

最佳答案

So how does windows run a program like that without any run time environment for C++?

问题的前提实际上是不正确的。至少在 Windows 上,实际上存在 C++ 的运行时环境。此运行时的一个组件(可能是最重要的一个)称为 C 运行时或 CRT。 :-)

通常在您的程序甚至进入 main() 函数之前,CRT 会执行一系列初始化例程,当您从 main() 函数返回时,它会清除追随自己。这种舞蹈的全部意义在于提供几乎所有 C 和 C++ 程序都需要的标准功能。

如果您在启动 Windows 程序时遇到过涉及缺少 msvcrt.dll 或类似内容的错误(例如,较新程序的 msvcr110.dll) ,缺少 CRT 是该程序所提示的。 msvcrt.dll 是实现 CRT 的文件。它代表“Microsoft Visual C 运行时”。

显然,msvcrt.dll 及其亲属随 Windows 操作系统一起提供,这就是为什么您通常不会遇到与 JRE 不同的缺少运行时环境的问题,JRE 必须由用户或计算机制造商。

但是,Windows C++ 应用程序被编译为使用特定版本的 MSVCRT,如果您使用了错误版本的 MSVCRT,那么操作系统会以同样的方式提示缺少。* 安装程序通常会检查操作系统是否具有正确的版本,如果没有,它会从自己的安装文件将其复制到您计算机上的某个位置。

但是,MSVCRT 并不是所有 Windows 程序都能正常工作的必要或充分条件。完全有可能编写一个不依赖于 MSVCRT 的程序,也完全有可能一个 Windows 程序将具有 MSVCRT 以外的依赖项。几乎所有重要的 Windows 程序都将依赖于 MSVCRT 和其他操作系统组件。程序的安装程序也会检查这些。

JRE 和 MSVCRT 之间有一些重要的区别。一个很大的区别是JRE为Java应用程序实现了一个虚拟机环境(这就是它实现“跨平台”能力的方式),这可能涉及即时编译等,而MSVCRT只提供标准功能,什么都不做关于你的 C++ 程序的汇编代码。


*这并不完全正确,因为 C++ 应用程序可以静态链接到不依赖于 DLL 的 MSVCRT。但是,大多数 Windows C++ 应用程序动态链接到它,在这种情况下需要正确的 DLL。

关于c++ - 用 C++ 编写的程序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12257567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com