Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用C++;工作_C++_Installation - Fatal编程技术网

C++ 如何使用C++;工作

C++ 如何使用C++;工作,c++,installation,C++,Installation,当我们运行java程序时,如果没有安装JRE,它就不能工作。 我发现大多数著名的应用程序,比如谷歌浏览器浏览器,都是用C++编写的。那么Windows如何运行这样的程序而没有任何C++运行时环境?安装过程中到底发生了什么? 那么windows如何在没有任何运行时间的情况下运行这样的程序呢 C++环境?< /P> 这个问题的前提实际上是不正确的。至少在Windows上,实际上有一个C++运行时环境。此运行时的一个组件(可能是最重要的组件)称为C运行时或CRT.:-) 通常,在您的程序甚至进入mai

当我们运行java程序时,如果没有安装JRE,它就不能工作。
我发现大多数著名的应用程序,比如谷歌浏览器浏览器,都是用C++编写的。那么Windows如何运行这样的程序而没有任何C++运行时环境?安装过程中到底发生了什么?

那么windows如何在没有任何运行时间的情况下运行这样的程序呢 C++环境?< /P> 这个问题的前提实际上是不正确的。至少在Windows上,实际上有一个C++运行时环境。此运行时的一个组件(可能是最重要的组件)称为C运行时或CRT.:-)

通常,在您的程序甚至进入
main()
函数之前,CRT会执行一系列初始化例程,当您从
main()
函数返回时,CRT会在自身之后进行清理。这个舞蹈的全部要点是提供几乎所有C和C++程序都需要的标准功能。 如果您在启动Windows程序时遇到涉及缺少
msvcrt.dll
或类似内容的错误(例如,对于较新的程序,
msvcr110.dll
),则程序会抱怨缺少CRT。
msvcrt.dll
是实现CRT的文件。它代表“Microsoft Visual C运行时”

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

但是,Windows C++应用程序编译成使用MSVCRT的特定版本,如果您有MSVCRT的错误版本,那么操作系统将以同样的方式抱怨它,如它丢失了。*安装程序通常做的是检查OS是否具有正确的版本,如果没有,它会从自己的安装文件复制到您计算机上的某个地方

然而,MSVCRT不是所有Windows程序运行的必要或充分条件。完全有可能编写不依赖于MSVCRT的程序,也完全有可能Windows程序具有MSVCRT以外的依赖项。实际上,所有重要的Windows程序都依赖于MSVCRT和其他操作系统组件。程序的安装程序也会检查这些

JRE和MSVCRT之间有一些重要的区别。一个很大的不同是JRE为java应用程序实现了一个虚拟机环境(这就是它如何实现它的“跨平台”能力),它可能涉及即时编译等,而MSVCRT只提供标准函数,对C++程序的汇编代码不做任何事情。

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

< P>,java程序通过JDK编译到字节码,然后在JRE

中运行。 <> > C++编程直接编译成机器可读代码,就像JRE必须编译在Windows

运行时(或C或C++标准库)中,典型地安装了操作系统(GLYBC,MVCRT,…)。 C/C++程序也可以“静态”编译,程序使用的库部分被链接(合并)到一个可执行文件中,所以程序在它自己的二进制文件中有库

至于执行Java代码的“虚拟机”。C++通常编译成系统的本地机器代码,将运行。CPU是将运行它的非虚拟机


也可以将C++程序编译成各种“字节码”(.NETCLR,LLVM),但这不太常见。

< P>这个问题似乎很明显,但是如果我们深入研究一下,它就显得很不明显。 让我给你一个更抽象的观点:

每种语言都可以由一台合适的机器来“执行”,该机器将语言指令连接到一个特定的硬件上,然后“执行”操作。区别在于“连接”的方式:它的直接程度和设置时间

windows(但同样适用于linux)机器至少是由处理器机器代码调用的某些“重要”DLL(例如Kernel.DLL)公开的一组函数

C程序通常在编译时翻译成机器代码,根据“协议”进行系统调用。不需要任何其他功能的程序可以在该环境中本地执行

需要其他功能的程序可以:

  • 静态链接到将函数实现为机器代码的库(事实上合并了它们的代码):这使得程序仍然是本地可执行的
  • 动态链接到这些库:程序需要在启动时或执行期间加载并链接这些库:如果这些库本身已经是操作系统的一部分,则程序只需运行,否则,这些库必须以程序可以找到的方式放置在某个位置(对于用于编译操作系统本身的版本以外的版本,这是C运行时支持的情况)
按照java语言的设计和实现方式,java程序不会直接翻译成机器代码,而是翻译成一种中间语言(字节码),该语言必须用作interpeter(java机器)的“输入”,interpeter(java机器)通过在底层机器上执行机器代码来实际执行其指令

由于Windows本身不是用Java编写的,它本身不需要这样的解释器,因此您无法直接在Windows安装中找到它,但如果需要,您必须将它放在那里。

Som