泛C++开发: 如何用C++写跨平台应用

本文探讨了如何通过选用合适的技术栈实现C++程序的一次编码、到处编译的目标。作者推荐了包括Boost、ACE、OTL、Qt等库来解决语言特性、操作系统差异、网络编程、数据库访问和用户界面等跨平台问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载自 http://lanmh.javaeye.com/blog/807536 ,文字上略有修改,版权仍属原作者所有。



 

  口号:一次编码,到处编译


  一次编码,在VC, VIM 甚至UltraEdit 上完成编码。
  到处编译,将写好的代码拷贝 到其它操作系统,也能够编译运行,而不用去修改哪怕一行代码。


  听起来是不是象SUN 的口气? 其实C++ 的移植性个人认为是超过java 的,但java 之所以名声在外的原因Bjarne Stroustrup 说得很明了:厂商利益。
 
  呵呵,废话不多说,进入主题。
 
  要建立一个C++ 跨平台的应用,亦难也易。


  难在什么?所谓应用,自是实际应用,牵涉面很广。 一般来说,至少有如下几个方面需要我们考虑:

  • 0. 语言及基础库 
  • 1. 操作系统相关的
  • 2. 网络
  • 3. 数据库
  • 4. 界面

  其它自然还有很多,如XML 、加解密等等,这里先讨论前面列出的几项。

 
  众所周知,不同的操作系统即时是相同的函数也可能有着差异。如函数的参数、返回值定义不同(socket) ,甚至语义不一样(sleep) 等等。如果全部需要自己来维护这个差异,必须手写无数如下形式的代码 :



  这绝对是一个浩大的工程。至于工程有多大,可以看一看 ACE 的开发成本。这是难


  为了能实现我的口号,我要做的是寻找经过大家实践的证明能用的跨平台库来帮助编码,建立在巨人的肩膀上,这个工作就变得容易了。下面逐一列出我的一些选择 :

0.
语言及基础库
: 标准 C++ boost

  标准C++98 年制定的,现在主流的C++ 编译器都能够比较好的支持了。这里建议使用VC7.1GCC4.0 及以上版本。 boost 则是C++ 标准委员会的一群人弄起来的一个C++ 库集合,其中不少库以经进入 C++ TR1 ,可以说是准标准。使用这里的库我们有着充分的理由。象字符串的操作可以用 boost string_algorithms 库,格式化操作可以用 boost::format ,正则式可用 boost::regex 等等。boost 内容相当的丰富,具体内容还请直接查阅 http://www.boost.org/libs/libraries.htm   这里有一个 boost 库的列表。
  
1.
操作系统相关的 : ACE (ADAPTIVE Communication Environment) boost

  ACE 将操作系统的相关的互斥量、信号、进程,线程等都很好的封装起来,可以直接使用。不过如果没有用到  ACE ,当然不是每个程序都跟网络有关,没用到网络时,可能也不会用ACE 。这时可以考虑使用boost 中相应的类 boost::thread, boost::inter_process 等。

2.
网络 ACE

  ACE 用来做网络应用是很不错的,除了对异构平台的简单的包装外还有应付各种环境的设计模式。甚至可以说是C++ 跨平台网络编程目前唯一之选。对于性能要求比较高的想使用IOCP(winnt)EPOLL(linux2.6),ACE  也提供了包装,可以方便使用。   

3.
数据库 OTL (Oracle, Odbc and DB2-CLI Template Library)

  要支持数据库,不但要跨平台,还要跨数据库,是不是比你想象的还要理想。OTL 支持以下面的数据库: OTL Oracle ,SQL Server, Access, MySQL 。还有其它的库如DTL ,但我看中了这个库不但支持ODBC ,它还支持数据库的原生接口,可以有更佳的性能。

4.
界面 QT, wxWidgets

  虽然使用了多年的 MFC ,我还是对 MFC 无数的宏深恶痛绝, wxWidgets 虽不错但 MFC 风格很明显。还是用 QT 吧,面向对象的编程还是比较让人愉快的。不过,QT 是双认证的,当你的程序免费时它就免费,你的程序打算卖钱时,它也要,而且要价很高。所以,如果有版权,成本上的考虑的话,则可以考虑wxWidgets


列出了不少东西,希望给大家一些帮助。不过最后要注意一点,每个库支持的平台数量有多有少,并不一致,做应用时要估量一下可能用到的平台。不过,一般来说是足够了,上面的库至少支持 Windows Unix/Linux 两种以上。到这里,基本上可以把自己写的程序在 WindowsLinux 搬来去了,呵呵 " 一次编码,到处编译"


相关链接:
ACE:  
http://www.cs.wustl.edu/~schmidt/ACE.html
BOOST:
http://www.boost.org
OTL:  
http://otl.sourceforge.net
QT:   
http://www.trolltech.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值