跨平台是什么意思呢?先了解一下平台的概念以及平台的差异。我们知道一个VC编译出来的*.exe是不能在Linux运行的,不能运行的原因可以概括为以下几个方面:
1. 文件的结构与格式
可执行程序是按定义好的格式来组织的, Microsoft 他 GNU对程序文件的定义是不一样的,如GNU使用 ELF格式定义。也就是说,当操作系统(Windows/Linux)试图把一个程序文件加载到内存里准备运行的时候,它可能会发现这个文件格式不对。
2. 依赖库
程序的最基本的运行库是C runtime,比如你调用的printf就是C库的接口,这间味着你发布的程序是依赖C的动态库的, Linux上叫libc.so
3. 指令集与大小端
最常见的指令集用Intel, ARM 指令集,如果你的程序是为Intel PC编译的,那么这个程序就不可能在ARM平台上运行。(也许它们都是运行着Linux)。但是指令集都不一样的话,怎么能够运行呢?
通过上面的讨论,可以发现跨平台好像是一件不能完成的任务。那么为什么我们还能经常见到跨平台这个词呢,JAVA, ACE ,QT等等,它们都是跨平台的。那么它们是怎么跨平台的呢?
第一种跨平台的方式:JAVA
首先说JAVA。JAVA这个东西跨平台最彻底,同时也可以说它最“不跨平台”。JAVA编译出来的class文件并不能直接在目标平台上运行,它必须由一个叫java.exe /java的程序解释执行。显然,在不同的平台上这个java解释程序是完全不一样的。最基本的,windows上的解释程序叫java.exe,linux上的叫java,是完全不的两个文件。这件事说白了就是,你写一个脚本