本篇文章主要介绍了"跨平台 跨平台这件事儿",主要涉及到跨平台方面的内容,对于软件工程感兴趣的同学可以参考一下:
跨平台很神秘吗刚刚开始做开发的时候,感觉跨平台是那么高大上,就像夕阳下,湖面上的一朵白莲花,只可远观,不可亵玩焉。那么,跨平台到底是怎么一回事儿。难道真的有什么...
跨平台很神秘吗
刚刚开始做开发的时候,感觉跨平台是那么高大上,就像夕阳下,湖面上的一朵白莲花,只可远观,不可亵玩焉。那么,跨平台到底是怎么一回事儿。难道真的有什么东西可以跨平台吗,这就像一台多功能交通设备,投到水里能游,放到陆地上能跑,扔到天上能飞,加速到第二宇宙速度都能脱离地球了进行星际航行了。

揭开跨平台神秘面纱
让我们一起来揭开跨平台神秘的面纱,比起一种语言是不是跨平台的,我们更关心的是功能可不可以跨平台,毕竟我们使用各种开发语言是为了实现某些功能。举个例子,假设我们打算用 Java 开发了一款游戏,这个游戏要跨 Mac、Windows、桌面版Linux 三个平台,怎么完成这个功能呢。
假设要完成游戏中人物的显示,这样一个看似很简单的功能,程序从上层向下层要做下面这些:
1、最上层 Java 要调用一个图像相关的类库;
2、这个类库要调用系统层提供的接口,比如显卡驱动相关接口;
3、这个显卡驱动相关的接口又调用了显卡的硬件接口;
我们再从下向上分析一下,如果要做到跨平台要做到什么?
1、最后调用到了硬件接口,那么首先要保证硬件是相同的,比如显卡是相同的,这就要保证世界上各大显卡厂商使用相同的标准;
2、再往上保证显卡配套的显卡驱动接口是相同的;
3、再往上还要保证系统暴露给上层的驱动接口调用 API 是相同的,这就要求三个平台具有相同的驱动 API 标准;
通过以上我们发现一个语言可不可以跨平台要看它的下一层是不是跨平台,依次类推,最后总会到达硬件层次。最后得出的结论就是只有硬件是同一种标准,那才能实现真正意义上的跨平台。但是由于历史、商业等等各种原因,导致完全统一标准几乎是不可能的。
所以目前所说的语言跨平台、框架跨平台都是用其他方式实现的,并且我们可以把这里的平台理解为语言、框架的下一层级的载体。
几种语言的跨平台方式


比如说 HTML 是跨平台的,他跨的平台指的是浏览器,浏览器几乎都遵循 w3c 标准,所以 HTML 是这样实现跨平台的。
比如说 C 语言是不是跨平台的,C 语言常常被用在偏底层的开发。那么 C 语言是如果在多个平台运行的呢?首先要编写代码,编写的代码要兼容要跨的平台,要支持 windows 平台,那么就要为 windows 实现一套代码,要支持 Linux 就要为 Linux 实现一套,然后当要执行的时候,简单粗暴的说就是加上 if else
做个判断,是哪个平台就用其对应的代码,着名的 GUI 开发框架 Qt j就是这个原理嘛,框架本身帮你做好了平台判断,在哪个平台就用哪个平台下的 GUI 接口,所以开发者只需要调用它包装包的接口即可。写完代码之后,拿这套代码到各个平台去编译成当前平台需要的格式,这里又涉及到了编译器,不同平台下的编译器也是不同, windows 下的编译器需要把 C 代码编译成 windows 下可执行的文件格式,Linux 下的编译器需要把 C 代码编译成 Linux 下的可执行文件格式。