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

时间:2012-04-09 18:54:59

标签: java linux architecture compiler-construction

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

很抱歉,如果这是一个简单的问题,但我真的没有太多线索。

另外,就Linux而言,cpu架构有什么区别。

5 个答案:

答案 0 :(得分:9)

从技术上讲,你错了。

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

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

答案 1 :(得分:4)

这是一个非常长的故事,但基本上是:

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

    但是,您可以努力使您的C / C ++ 代码与平台无关,但由于您有不同的操作系统(有时是不同的架构),您必须编译(相同)代码每个要运行它的系统,以便构建将在特定机器中运行的正确二进制文件。

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

    OBS2:要了解有关可执行文件的更多信息,一个带有“好”答案的好“问题”是:What does executable file actually contain?

答案 2 :(得分:1)

因为Java不是编译成机器代码,而是编译成由JVM(Java虚拟机)执行的字节代码,它负责操作系统特定(并为Java程序提供操作系统功能的统一接口)。

答案 3 :(得分:0)

Java构建在称为Java虚拟机或JVM的虚拟计算机上。只要JVM在计算机上正确实现,所有Java程序都应该在那里轻松运行。需要注意的是代码本身是否包含特定于操作的项目,例如硬编码的路径名(例如,这些名称在Unix和Windows之间不同)。

答案 4 :(得分:0)

问题不在于语言,而是使用了库。我正在开发一个项目,它可以在Windows和Linux上轻松使用99%的相同代码。我们可以这样做,因为我们使用的是具有Windows和Linux实现的库。这些库封装了特定于平台的代码。 Java是一样的:它有一个标准库,在每个平台上都有不同的实现方式。