我一直想知道为什么某些语言,例如Java在两个Linux上都运行很少或没有修改代码,但是其他语言你几乎要重写所有代码。为什么是这样?因为内核?
很抱歉,如果这是一个简单的问题,但我真的没有太多线索。
另外,就Linux而言,cpu架构有什么区别。
答案 0 :(得分:9)
从技术上讲,你错了。
Java不能在Linux上运行。它也不能在Windows上运行。它既不在Mac上运行,也不在任何其他Unix操作系统上运行。就此而言,它不能在任何操作系统上运行。
它直接在机器上运行。它仅适用于一种类型的机器 - Java虚拟机。幸运的是,Java虚拟机已经虚拟化到Linux,Windows,Mac等上。
答案 1 :(得分:4)
这是一个非常长的故事,但基本上是:
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是一样的:它有一个标准库,在每个平台上都有不同的实现方式。