c++ socket跨平台android ios,xoskit: c++跨平台解决方案,支持windows,linux,mac,ios,android。...

xoskit

概述

c++跨平台解决方案

xoskit是为了解决c++跨平台开发时,遇到的各平台特性不同,导致代码充满宏定义,难以维护问题的。

原理

7cec8eebd3eca52088ade1a69fd4669e.png

图1: xoskit原理

特点

各平台分别实现接口功能

各平台的接口实现,编译为模块

模块采用动态库形式。这是因为静态库虽然可以编译进程序,编译时却要链接一堆有关无关的库,实难管理

模块导出一个create方法,用来创建管理者接口

管理者接口可以创建模块内所有功能接口

除了基本跨平台功能,xoskit也提供了程序开发需要的其它功能

xoskit引入了一些常用库,并以静态库的形式封装编译进了xoskit的动态库。

xoskit保存了常用库在各平台上的静态库文件,方便编译xoskit。但这导致了xoskit项目很庞大。带来的好处是,xoskit对外界没有任何依赖,使用极其方便。

使用接口带来的一个好处是,没有编译依赖,只要包含了接口文件就可以编译。

结构

52b8ce41108a6e91bdbd07802d506cc7.png

图1: xoskit结构

如你所见,xos_container模块的作用就是把所有功能接口集中导出来。

红色线框的xos_aio和xos_core是平台相关的,代码每个平台一份,各不相同。其它模块的代码只有一份。

模块作用就不说了,因为是能看得出来的。

xos_sqlite没有实现,因为我没用过它。只是一个空架子放那了。

例子

看例子最容易理解。xoskit\example是一个载入所有接口的例子。这个例子也是跨平台的。

核心代码:

xos_container::i_container * container_ptr = 0;

void * xos_module = 0;

xos_container::f_create fun = 0;

int ret = 0;

if( 0 == ret )

{

ret = xos_helper::xos_load_and_get( ( void ** )&fun,

xos_module,

0,

"xos_container",

"create" );

}

if( 0 == ret )

{

ret = fun( &container_ptr );

}

xos_stl::release_interface( container_ptr );

xos_helper::xos_free( xos_module );

xos_container::i_container当中包括了所有功能接口。有了它,就可以使用xoskit的所有功能了。

更好的例子

现在没人用c++开发网站,是因为没有好的框架。我试着写了一个这样的框架,使用c++开发网站,就类似于用java的servlet,jsp,struts2。

缺点

xoskit要求使用者用它的接口来写程序,这样原来基于系统接口的c++代码是没法用xoskit的。也很难修改过来,只有新开发的项目才能用xoskit。其实c++本身就是跨平台的,只要弥合了平台的一点差异,比如线程,文件,同步方法,网络等,跨平台开发还是不难的。

求助

xos_encrypt模块用了openssl静态库,我自认为使用方法没错,可是它总是有内存泄漏,vld可以看出来。我没办法查出原因,请了解的人教我。

编译

编译输出目录结构

比如我的build输出目录是这样:

D:\vmware\c++\develop\build\Win32\BIN\U_D_MD

D:\vmware\c++\develop\build\Win32\BIN\U_R_MT

D:\vmware\c++\develop\build\Win32\InterMediaFiles\各项目的临时文件

D:\vmware\c++\develop\build\x64\BIN\U_D_MD

D:\vmware\c++\develop\build\x64\BIN\U_R_MT

D:\vmware\c++\develop\build\x64\InterMediaFiles\各项目的临时文件

D:\vmware\c++\develop\build\linux\BIN\U_D_MD

D:\vmware\c++\develop\build\linux\BIN\U_R_MT

D:\vmware\c++\develop\build\linux\InterMediaFiles\各项目的临时文件

...

其它平台也类似。

windows

直接用vs,我开发用的是vs2015,如果你也用这个版本的话,可以直接打开sln编译:D:\vmware\c++\develop\xoskit\xos_sln\vs_2015.sln。debug时,要先编译一下xos_makefile,它只是帮助把其它项目需要的vld拷到输出目录。

用makefile。windows上,也和其它平台一样,可以使用makefile.用的是ndk带的一个make.exe工具。makefile文件和其它平台共用的。需要先设置一下环境:

把D:\vmware\c++\develop\xoskit\xos_lib\tools加到系统path中,这里有ndk的make.exe工具和帮助运行dos命令的工具tool.exe。dos命令不接受/格式的路径,没了tool.exe,makefile是跑不起来的。

编译win32,用vs的VS2015 x86 Native Tools Command Prompt进入dos,转到D:\vmware\c++\develop\xoskit\xos_makefile目录,运行命令:make OS=win32 [G=-g]

编译x64,用vs的VS2015 x64 Native Tools Command Prompt进入dos,转到D:\vmware\c++\develop\xoskit\xos_makefile目录,运行命令:make OS=x64 [G=-g]

可以看到,xoskit\xos_makefile目录下有各平台的编译变量定义文件。

其它平台

因为要分目录输出,所以其它平台都定义了平台名称,编译时要输入平台名称,比如make os=(win32|x64|linux|linux64|mac|ios_static|ios_simulator|android)

编译每个平台代码时,我没做交叉编译,要用这个平台的环境。比如编译mac下的代码,要用苹果系统的编译环境,make OS=mac [G=-g]。

G=-g表示编译调试版本,不加G宏定义,编译release版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值