今天偶尔看见了一个帖子。
关于Windows下编程和Linux下编程的问题(c/c++)。
其中说到什么windows系统API linux系统API什么的。我突然间就有一个疑问了。算是比较底层的疑问?关于语言跨平台的问题。
第一个问题,语言跨平台指的是什么意思。虽然我是搞JAVA的。但是我还是想知道。这些问题。关于java跨平台是指 一次编译处处运行。
无论我在什么系统下,把java源程序编译成字节码后。
拿到什么平台下都可以运行。
因为java的字节码跑在虚拟机上。
虚拟机不跨平台可以根据不同的操作系统产生不同的指令。
感觉是比较抽象的说法,底层到底什么样呢?

有一个问题。我的java字节码在虚拟机上被解释器到底解释成什么了?
再说C/C++
没搞过C/C++但是大一的时候学过。记得当时说。
源程序 编译 汇编源程序 汇编 机器语言(obj 目标程序)
然后.obj程序连接成为可执行程序。既然编译成了汇编源程序。为什么不跨平台呢?想象这个过程为什么C/C++就不跨平台呢?指的是什么呢?小弟因为没接触过linxu。原来也没想过这种问题。现在脑袋里疑问很多啊。

我们的程序又与操作系统API有什么关系呢?
程序最后不都是010101机器语言。CPU直接执行吗?有没有高手,大神。给详细解释下啊?

解决方案 »

  1.   

    说起这个,如果你是计算机专业的,应该学过逻辑电路。计算机指令最底层就是逻辑电路。也就是硬件指令。汇编语言只是硬件指令的助记码而已。但是不同的芯片指令集是不一样的。多少都有区别。有的可能会区别很大。这是最底层的不同。比如sun的服务器或者IBM的服务器,采用了不同的CPU,他支持的指令集就不一样。那么高层的代码内容可能是一样的,但最后产生的汇编可能完全不同。再就是不同的操作系统支持的系统API也不同。最终程序还是运行在操作系统上的。那么每个操作系统支持的运行环境和API都不同。比如windows和linux差别就很大。最终windows的c++程序在windows上编译以后在linux上就不能运行。java采用了中间码的形式来克服这个问题。
      

  2.   

    c++/c语言本身是跨平台的
    系统API个人认为可以想象成一个非c++标准的类库(像iostream,string这些是c++标准里有的),提供了很多有用的函数,也像很多java开源的项目,如log4j,你可以用在自己的项目上,且要依赖于这个jar包c++亦然,用了系统API后,你就依赖于系统API,如果要让其他系统也支持你的代码,其他系统也就必须要提供这套api,然而,c++与java不同的是,jar包本身是可以跨平台的,而系统api没法跨平台,没法统一,如果是纯标准c++写出的程序,在win上可以编译,在linux上也可以编译的再说java的跨平台,java的跨平台则更进一步,使得无需在每个平台上编译,就是为每个系统上提供了一套运行环境以支持java代码中的api
      

  3.   

    为什么在windows下编译好的程序无法在linux下运行呢?
    说的底层点好吗?
      

  4.   

    最近看了,深入理解计算机系统和C Primer Plus.终于稍微明白点,这些问题了。