当我们运行java程序时如果没有安装JRE,它就不起作用.
我发现大多数着名的应用程序,如Google Chrome浏览器都是用C++编写的.那么Windows如何在没有任何C++运行时环境的情况下运行这样的程序?安装过程中究竟发生了什么?
In *_*ico 25
那么Windows如何在没有任何C++运行时环境的情况下运行这样的程序?
这个问题的前提实际上并非如此.至少在Windows上,实际上有一个C++的运行时环境.此运行时的一个组件(可能是最重要的组件)称为C运行时或CRT.:-)
通常在程序进入main()函数之前,CRT会执行一系列初始化例程,当您从main()函数返回时,它会自行清理.这种舞蹈的重点是提供几乎所有C和C++程序所需的标准功能.
如果您在启动Windows程序时遇到过丢失msvcrt.dll或类似错误的错误(例如msvcr110.dll对于较新的程序),则缺少CRT就是该程序所抱怨的内容.该msvcrt.dll是实现的CRT文件.它代表"Microsoft Visual C Runtime".
显然,msvcrt.dll它的亲戚和Windows操作系统一起运行,这就是为什么你不会遇到缺少运行时环境的问题,这与JRE不同,JRE必须由用户或计算机制造商安装.
但是,Windows C++应用程序被编译为使用特定版本的MSVCRT,如果您的MSVCRT版本错误,那么操作系统会抱怨它的缺失方式.*安装程序通常做的是检查操作系统具有正确的版本,如果没有,则将其从计算机的某个位置复制到自己的安装文件中.
但是,对于所有Windows程序而言,MSVCRT不是必要条件,也不是充分条件.编写一个不依赖于MSVCRT的程序是完全可能的,并且完全有可能Windows程序将具有除MSVCRT之外的依赖项.几乎所有重要的Windows程序都依赖于MSVCRT和其他操作系统组件.程序的安装程序也会检查这些.
JRE和MSVCRT之间存在一些重要差异.一个很大的区别是JRE实现了Java应用程序的虚拟机环境(即它实现了它的"跨平台"功能),这可能涉及即时编译等,而MSVCRT只提供标准功能而且什么也不做关于C++程序的汇编代码.
*这不是严格正确的,因为C++应用程序可以静态链接到MSVCRT,而MSVCRT不依赖于DLL.但是,大多数Windows C++应用程序动态链接到它,在这种情况下需要正确的DLL.