2、源码级跨平台开发——选择运行时库1

来源:互联网 发布:淘宝客链接转发微信 编辑:程序博客网 时间:2024/06/02 05:14

​ 在各种跨平台开发中,源码级跨平台开发其实是最适中的。这种方式兼顾了灵活性和跨平台。显然,效率也会是最好的。但是,调试起来会比较的不容易。尤其重要的是开发难度比较高。所以,很多人宁愿选择效率有损失的二进制级别跨平台。但是,很多时候程序的运行效率还是放在第一位的。此时,我们就不得不采用源码级跨平台开发。比如游戏引擎、强数据运算的算法、传输算法等等。
​ 源码级跨平台开发的难点在什么地方呢?最主要的还是运行时库的问题。 假如你的软件仅仅使用标准C。那这个程序的可移植性也就没有任何问题,它甚至可以在嵌入式设备上运行。然而,标准C涵盖的技术太少了,它没有包含GUI、也包含线程,连对文件和目录的读写都不怎么完整。所以,很多时候,标准C并不能满足我们的需求。我们需要更加强大的支持。于是,只好寻找更好的跨平台的运行时库。
​ 这个跨平台的运行时库会为你的程序在每个他所支持的平台上都提供相同的编程接口。你的程序就是调用这些接口来实现跨平台。事实上,你的程序仅有一份源代码,却存在不同的二进制版本。无论在哪个平台上,你都不会直接调用该系统所提供的API,而是通过运行时库来调用。
​ 但是,想完全做到这一点并不是特别容易。各种操作系统之间存在着太多的差异。尤其是GUI、线程、文件及目录部分。当然,还有动态链接库、网络信息、计算机信息等等细节问题也有很大差异。更加令人沮丧的是,这种情况并没有随着计算机的发展而变的好转起来。很多系统厂商,为了各自的商业目的,有意无意的加重个系统之间的差异性。使得跨平台开发越来越麻烦。例如在Windows下非常常见的COM技术,走到Linux下便无计可施。
​ 事实上,现在已经有很多显存在跨平台运行时库了。最常用的估计就是wxWidgets了。当然,几乎所有的跨平台运行时库都是以GUI为目标的。很少听到没有GUI的跨平台运行时库。下面,我们就来看看显存的那些跨平台运行时库。

1、wxWidgets
​ wxWidgets项目是一个跨平台的GUI库。该项目历史悠久,开始与1992年。早期叫做wxWindows,但是由于微软对Windows有专利,后来才改名为wxWidgets。
1.1 wxWidgets 的优点
​ 1)、通过封装平台原生接口来实现GUI。
​ 正是由于这个原因,使用wxWidgets实现的应用程序,在不同的平台上运行时会和系统原生的应用程序在外观上非常相似。
​ 2)、在实现上跟MFC相识。也是采用消息映射的方式进行。
​ 对于熟悉MFC的程序员来说,学习wxWidgets要轻松很多。
1.1 wxWidgets 的缺点
​ 正所谓“成也萧何,败也萧何”。wxWidgets 的优点也给wxWidfets 带来了最大的缺点——无法实现换肤。在追求个性化的时代,没有换肤功能的程序真的很难生存。wxWidgets 程序的界面风格跟系统绑的死死的。
​ 另外,在控件库方面上也有其缺点之一。不太容易实现复杂的控件一直是个比较头疼的问题。

2、QT
​ QT原来是一个商业公司开发的。不过后来修改的授权,变的对开源相对“和谐”起来。QT是linux下著名桌面环境KDE的基础。而QT也可以在Windows下运行。所以,QT本身是一个平台无关的GUI库。
​ QT和wxWidgets不同,它不是调用平台提供的界面库,而是自己绘制。所以,QT可以实现换肤。但是,QT的授权始终都是个问题。另外,QT的很多高级库并免费的。

3、GTK
据说GTK当初是为了写GIMP而实现的GUI库。它是用C语言写成的。不过,也采用了面向对象的思想。并且它是Linux下另外一款著名桌面环境GNOME的基础。GTK 也是跨平台的,使用GTK的程序同样可以运行到Windows上。GIMP就有Windows的版本。
​ 不过,由于GTK是使用C语言实现的,所以,其面向对象的实现有些臃肿。另外,GTK 的界面是多线程不安全的。所以使用GTK写多线程的程序时一定要多加留意。另外,GTK 也可以很方便的实现换肤。因为他的界面也是自己绘制出来的。

4、FLTK
​ FLTK 是一款非常轻量级的GUI库。笔者就曾经使用FLTK设计过一款软件。但是,FLTK的控件也是自绘的。所以,实现换肤还是比较容易的。另外,FLTK中内置了4套皮肤可以使用。
​ 但是,FLTK对中文的支持还不是特别好。很遗憾的是它对输入法的支持相当不好。至少我还没有在FLTK的程序中输入过汉字。

5、FOX
​ 和FLTK类似也是一款轻量级的GUI库。我是在写本文时才知道的这个GUI库。对其了解不多。据说:“作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受出发,从而开始了对这个库的开发。”
​ 简单看了一下源码,并试用了一下,发现其确实蛮轻量级的。编译出来仅仅一个2MB左右的so。不过跟FLTK一样,不能使用输入法。估计中文支持也是有问题的。

6、Juce
​ 据说很强大。该库对音频的支持青睐有加。我也是在写本文时才刚刚留意有这个一个库存在的。没有用过。据说很多音频厂商使用了该类库。该类库也是跨平台的,包含了一系列控件。界面做的很是漂亮,很有Mac的风格。不过默认字体好小,看的眼睛很受不了。
​ 我简单试用了一下。它对图形和音频的处理确实很有独到之处。对OpenGL的支持也很好。不过,很可惜,同样不支持中文。

当然还有很多类是的库可以使用,如果想了解更多,可以到http://www.atai.org/guitool/

阅读全文
0 0