泛C++开发: 如何用C++写跨平台应用
口号:一次编码,到处编译! :-)
一次编码,在 vc7.1 , vi 甚至ulteredit 上完成编码。
到处编译,将写好的代码 copy 到其它操作系统,也能够编译运行,而不用去修改哪怕一行代码。
听起来是不是象 SUN 的口气,呵呵。 其实 c++ 的移植性个人认为是超过 java 的,java之所以名声在外的原因 B.S 说得很明了:厂商利益。
呵,废话不多说,进入主题。
要建立一个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 Template Library)
要支持数据库,不但要跨平台,还要跨数据库,是不是比你想象的还要理想。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/
分享到:
相关推荐
《C++跨平台开发技术指南》是一本专注于C++语言跨平台开发的实用技术书籍。这本书详细介绍了C++在不同操作系统上,如Windows、Mac OS和Linux上开发应用程序的策略和实践。跨平台开发是软件开发领域中的一个重要方面...
《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...
总之,C++跨平台开发是一项复杂但值得投入的任务,它不仅可以扩大应用的受众范围,还可以提高代码的重用率和开发效率。通过采用上述策略和技术,开发者可以有效地克服跨平台开发中的挑战,创建出高质量、高可移植性...
本书《C/C++编写跨平台程序:实践篇》主要面向已经具备一定C/C++基础的读者群体,旨在教授如何使用C/C++这一强大的编程语言来编写可以在多个操作系统上运行的跨平台程序。跨平台编程不仅需要对语言有深入理解,还要...
在当今多元化的技术生态中,C++ 作为一种强大而广泛应用的编程语言,跨平台开发能力显得尤为重要。无论是开发桌面应用程序、游戏引擎,还是嵌入式系统软件,能够在不同操作系统上无缝运行的 C++ 代码可以极大地拓展...
标准C++库大全,进行跨平台C++开发的利器.适合用于C++的深入和标准化开发,不可多得.
《C++跨平台开发技术指南》是一本专为开发者设计的深入探讨C++在不同操作系统上进行跨平台开发的权威指南。作者Syd Logan是一位经验丰富的软件工程师,他在书中详细阐述了如何利用C++的强大功能来创建能在Windows、...
《C/C++跨平台开发指南:使用CMake构建多平台项目》深入探讨了如何利用CMake进行跨平台C/C++项目的构建。文章首先介绍了CMake的基本概念,包括其核心组件和工作流程。接着,详细解析了CMakeLists.txt文件的结构与...
为了实现跨平台兼容性,开发人员通常会使用如Qt、GTK+或Poco等跨平台库,或者直接使用标准C++库,避免依赖特定操作系统的API。 2. **多媒体框架**:开发播放器的核心是选择合适的多媒体框架,如FFmpeg、GStreamer或...
C++是一种强大而灵活的面向对象编程语言,而Qt则是一个功能丰富的开源跨平台开发框架,它为C++提供了丰富的库和工具,使得开发高质量、可移植的应用程序变得更加便捷。本文将深入探讨如何在C++中利用Qt框架实现设计...
C++作为一种广泛使用的编程语言,加上跨平台框架wxWidgets,可以方便地实现这一目标。wxWidgets,最初名为wxWindows,是一个开源的跨平台C++库,提供了一整套界面元素、工具和API,使得开发者能够创建同时支持...
C++跨平台开发方法工具比较 cygwin + vc cygwin + CBX VMWare + smbmount + CBX VMWare + smbmount + vc + gcc/make
当我们谈论"C++连接MySQL跨平台"时,我们关注的是如何在不同的操作系统(如Windows、Linux、macOS等)上使用C++编写程序来与MySQL数据库进行交互。这涉及到C++的MySQL客户端库(通常称为libmysqlclient)的使用,它...
在Visual C++中,MFC(Microsoft Foundation Classes)提供了一套丰富的类库来支持Windows平台下的图形用户界面开发,而OpenGL(Open Graphics Library)是一个功能强大的跨语言、跨平台的API,用于渲染2D和3D矢量...
本项目名为"C++ 跨平台 异步消息队列",显然它提供了一个用C++编写的跨平台解决方案,用于在不同线程间安全地传递和处理消息。下面我们将深入探讨这个项目的相关知识点。 首先,异步消息队列的核心概念是将任务或...
标题中的“纯标准c++实现的跨平台INI文件解析类”指的是使用纯C++语言编写的一个类库,它能够解析和操作INI配置文件,并且可以在多种操作系统上运行,体现出跨平台特性。INI文件是一种常见的轻量级配置文件格式,...
C++作为一种强大的、通用的编程语言,支持标准模板库(STL),并具有面向对象和泛型编程的特点,使其成为开发跨平台应用的理想选择。 描述中提到,该计时器是为Windows环境下的Visual Studio 2010编译器优化的,这...
Qt 是一个跨平台的应用开发框架,旨在为桌面、嵌入式和移动平台创建具有令人惊叹的用户界面的优秀软件应用。 它为开发人员提供了一套优秀的工具,用于设计和构建优秀的应用,而不必担心平台依赖性。在本书中,我们将...
《C++跨平台开发技术指南:构建Mac OS X、Linux和Windows应用程序》一书为解决这一问题提供了详尽的指导。本书不仅针对C++程序员,也适合所有对跨平台开发感兴趣的读者。 #### 二、跨平台开发的重要性 跨平台开发...
**C++跨平台串口库Serial** 在C++编程中,与硬件设备进行通信时,串口通信是一种常见的方法,特别是在嵌入式系统和物联网(IoT)应用中。`serial`库是一个强大的C++库,它允许开发者在多个操作系统上进行串口通信,...