跨平台开发

跨平台软件的开发方式大体有三种
1. 移植
先在一个基准平台上开发好,通过改写部分代码移植到其他的操作系统下运行
1.1宏定义
用C/C++的编译宏指令来实现,#ifdef …#else…#endif

#ifdef WIN32
#define LOCALTIME_R(t)   localtime((t))
#define SNPRINTF _snprintf
#else
#define LOCALTIME_R(t)   localtime_r((t), (struct tm *)&tmres)
#define SNPRINTF snprintf
#endif

1.2. 编译环境识别
在C/C++编译器编译源码时,为了能够识别当前环境的状况,这包括编译器的类型和版本,操作系统的类型和版本,计算机CPU的类型,机器内部的字节顺序等,每种编译器内部一般规定了一些常用的宏定义,利用这些定义就可以区分出当前的编译环境了。
如果我们开发的软件需要在很多不同的平台很编译器上编译,这时候环境就比较复杂了,如果我们能够将编译环境的宏定义转换成我们自己内部的约定,然后全部使用内部的约定来处理宏,这会简化我们进行跨平台移植的操作。

// _ENV_WIN                  32 or 64 bit Windows
// _ENV_WINNT                Windows NT
// _ENV_WIN32                32 bit Windows
// _ENV_WIN64                64 bit Windows
#if (defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) || defined(__WIN32__))
#define _ENV_WIN
#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__))
#define _ENV_WIN32
#elif (defined(WIN64) || defined(_WIN64))
#define _ENV_WIN64
#endif
#ifdef _WIN32_WINNT
#define _ENV_WINNT
#endif

1.3. 定义通用的数据类型
在目前的大多数计算机系统中,基本的数据类型在字节长度上基本一致,比如int类型占4个字节,char类型占1个字节等,但有些基本的数据类型还是有差别的,比如float、double和64位的整数类型,不同的平台还是有些差别的,为了方便进行跨平台的编程,定义一个通用的数据类型可以简化花费在数据类型上的时间。

1.4. 利用平台交叉工具移植
1.4.1. 从Unix/Linux到Windows
Cygwin(http://cygwin.com/
Cygwin由仿真层和一组工具组成,cygwin1.dll:它作为UNIX的一个仿真层,提供UNIX API功能; Cygwin工具负责创建一个UNIX或Linux的外观界面。
NuTCRACKER(http://mkssoftware.com/)
1.4.2. 从Windows到Unix/Linux
Wind/U(http://bristol.com/)
Visual MainWin(http://mainsoft.com/)

2.跨平台模块组合

3.虚拟机技术,利用平台无关的语言进行开发
虚拟的代价也很大,主要体现在降低了执行的效率

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值