要建立一个c++跨平台的应用,亦难也易。
难在什么?所谓应用,自是实际应用,牵涉面很广。一般来说,至少有如下几个方面需要我们考虑:
0.语言及基础库
1.操作系统相关的
2.网络
3.数据库
4.界面
其它自然还有很多,如XML,加解密等等,这里先讨论前面列出的几项。
众所周知,不同的操作系统即时是相同的函数也可能有着差异。如参数,返回值定义不同(socket),甚至语义不一样(sleep)等等。如果全部需要自己来维护这个差异,必须手写无数如下形式的代码:
#if defined WINNT
#elif defined LINUX
...
这绝对是一个浩大的工程。至于工程有多大,可以看一看 ACE的开发成本。这是难!
为了能实现我的口号,我要做的是寻找经过大家实践的证明能用的跨平台库来帮助编码,建立在巨人的肩膀上,这个工作就变得容易了。下面逐一列出我的一些选择:
0.语言及基础库:
标准 C++ 与boost
标准 c++ 是98年制定的,现在主流的 c++编译器都能够比较好的支持了。这里建议使用VC7.1和GCC4.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 中相应的类thread::thread, Boost.::Process 等。
2.网络
ACE
ACE用来做网络应用是很不错的,除了对异构平台的简单的包装外还有应付各种环境的设计模式。甚至可以说是C++跨平台网络编程目前唯一之选。对于性能要求比较高的想使用IOCP(winnt)或EPOLL(linux2.6)的,ACE 也提供了包装,可以方便使用。
3. 数据库
OTL (Oracle, Odbc and DB2-CLI TemplateLibrary)
要支持数据库,不但要跨平台,还要跨数据库,是不是比你想象的还要理想。OTL支持以下面的数据库: OTL Oracle ,SQL Server, Access,MySQL。还有其它的库如DTL,但我看中了这个库不但支持ODBC,它还支持数据库的原生接口,可以有更佳的性能。
4.界面
QT,wxWidgets
虽然使用了多年的 MFC,我还是对 MFC 无数的宏深恶痛绝, wxWidgets虽不错但 MFC 风格很明显。还是用 QT吧,面向对象的编程还是比较让人愉快的。不过,QT是双认证的,当你的程序免费时它就免费,你的程序打算卖钱时,它也要,而且要价很高。所以,如果有版权,成本上的考虑的话,则可以考虑wxWidgets。
列出了不少东西,希望给大家一些帮助。不过最后要注意一点,每个库支持的平台数量有多有少,并不一致,做应用时要估量一下可能用到的平台。不过,一般来说是足够了,上面的库至少支持 windows 和 unix/linux两种以上。到这里,基本上可以把自己写的程序在 windows、linux搬来去了,呵呵 "一次编码,到处编译!" 。
相关
ACE: http://www.cs.wustl.edu/~schmidt/ACE.html
BOOST: http://www.boost.org/
OTL: http://otl.sourceforge.net/
QT: http://www.trolltech.com/
难在什么?所谓应用,自是实际应用,牵涉面很广。一般来说,至少有如下几个方面需要我们考虑:
0.语言及基础库
1.操作系统相关的
2.网络
3.数据库
4.界面
其它自然还有很多,如XML,加解密等等,这里先讨论前面列出的几项。
众所周知,不同的操作系统即时是相同的函数也可能有着差异。如参数,返回值定义不同(socket),甚至语义不一样(sleep)等等。如果全部需要自己来维护这个差异,必须手写无数如下形式的代码:
#if defined WINNT
#elif defined LINUX
...
这绝对是一个浩大的工程。至于工程有多大,可以看一看 ACE的开发成本。这是难!
为了能实现我的口号,我要做的是寻找经过大家实践的证明能用的跨平台库来帮助编码,建立在巨人的肩膀上,这个工作就变得容易了。下面逐一列出我的一些选择:
0.语言及基础库:
标准 C++ 与boost
标准 c++ 是98年制定的,现在主流的 c++编译器都能够比较好的支持了。这里建议使用VC7.1和GCC4.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 中相应的类thread::thread, Boost.::Process 等。
2.网络
ACE
ACE用来做网络应用是很不错的,除了对异构平台的简单的包装外还有应付各种环境的设计模式。甚至可以说是C++跨平台网络编程目前唯一之选。对于性能要求比较高的想使用IOCP(winnt)或EPOLL(linux2.6)的,ACE 也提供了包装,可以方便使用。
3. 数据库
OTL (Oracle, Odbc and DB2-CLI TemplateLibrary)
要支持数据库,不但要跨平台,还要跨数据库,是不是比你想象的还要理想。OTL支持以下面的数据库: OTL Oracle ,SQL Server, Access,MySQL。还有其它的库如DTL,但我看中了这个库不但支持ODBC,它还支持数据库的原生接口,可以有更佳的性能。
4.界面
QT,wxWidgets
虽然使用了多年的 MFC,我还是对 MFC 无数的宏深恶痛绝, wxWidgets虽不错但 MFC 风格很明显。还是用 QT吧,面向对象的编程还是比较让人愉快的。不过,QT是双认证的,当你的程序免费时它就免费,你的程序打算卖钱时,它也要,而且要价很高。所以,如果有版权,成本上的考虑的话,则可以考虑wxWidgets。
列出了不少东西,希望给大家一些帮助。不过最后要注意一点,每个库支持的平台数量有多有少,并不一致,做应用时要估量一下可能用到的平台。不过,一般来说是足够了,上面的库至少支持 windows 和 unix/linux两种以上。到这里,基本上可以把自己写的程序在 windows、linux搬来去了,呵呵 "一次编码,到处编译!" 。
相关
ACE: http://www.cs.wustl.edu/~schmidt/ACE.html
BOOST: http://www.boost.org/
OTL: http://otl.sourceforge.net/
QT: http://www.trolltech.com/
欢迎您使用http://Blogmove.cn提供的"博客搬家"和"博文三窟"服务.