为什么必须为Windows和Linux编写单独的程序

The*_*Cat 0 java architecture linux compiler-construction

我一直想知道为什么有些语言,例如Java在两个Linux上都运行很少或没有修改代码,但是其他语言你几乎要重写所有代码.为什么是这样?因为内核?

对不起,如果这是一个简单的问题,但我真的没有太多线索.

另外,就Linux而言,cpu架构之间的区别是什么.

emo*_*ory 9

从技术上讲,你错了.

Java不能在Linux上运行.它也不能在Windows上运行.它既不在Mac上运行,也不在任何其他Unix操作系统上运行.就此而言,它不能在任何操作系统上运行.

它直接在机器上运行.它只适用于一种类型的机器 - Java虚拟机.幸运的是,Java虚拟机已经虚拟化到Linux,Windows,Mac等.


Moa*_*nti 5

这是一个很长的故事,但本质上是:

  1. 二进制可执行文件始终依赖于平台。通常我们用操作系统+架构来表示平台。示例:Windows x86、Linux x86-64 等。这是因为它们主要在操作系统的帮助下执行,操作系统为可用硬件提供抽象。
  2. 字节码(不可执行)可解释文件可以独立执行,因为它们是由机器上已安装的二进制平台相关文件解释的。

Java 代码转换为字节码可解释文件 (.class)。它由依赖于平台的Java虚拟机解释和执行,该虚拟机可以安装在Windows、Linux、Mac平台上。

但是,您可以努力使 C/C++代码非常独立于平台,但由于您有不同的操作系统(有时还有不同的体系结构),因此您必须在要运行它的每个系统上编译该(相同的)代码,以便构建将在特定机器上运行的正确二进制文件。

OBS:为了使您的代码更加独立,您应该使用所有系统上都可用的库。

OBS2:要了解有关可执行文件的更多信息,一个好的“问题”和好的“答案”是:可执行文件实际上包含什么?