# xoskit **Repository Path**: helloworldghh/xoskit ## Basic Information - **Project Name**: xoskit - **Description**: c++跨平台解决方案,支持windows,linux,mac,ios,android。 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-05-05 - **Last Updated**: 2025-08-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xoskit ## 概述 ----------------- >c++跨平台解决方案 xoskit是为了解决c++跨平台开发时,遇到的各平台特性不同,导致代码充满宏定义,难以维护问题的。 ### 原理 ### ![](doc/image/xoskit_overview.png)
图1: xoskit原理
### 特点 ### 1. 各平台分别实现接口功能 2. 各平台的接口实现,编译为模块 3. 模块采用动态库形式。这是因为静态库虽然可以编译进程序,编译时却要链接一堆有关无关的库,实难管理 4. 模块导出一个create方法,用来创建管理者接口 5. 管理者接口可以创建模块内所有功能接口 6. 除了基本跨平台功能,xoskit也提供了程序开发需要的其它功能 7. xoskit引入了一些常用库,并以静态库的形式封装编译进了xoskit的动态库。 8. xoskit保存了常用库在各平台上的静态库文件,方便编译xoskit。但这导致了xoskit项目很庞大。带来的好处是,xoskit对外界没有任何依赖,使用极其方便。 9. 使用接口带来的一个好处是,没有编译依赖,只要包含了接口文件就可以编译。 ### 结构 ### ![](doc/image/xoskit_struct.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的所有功能了。 ### 更好的例子 ### [cat - 可以用c++开发网站了](https://gitee.com/helloworldghh/cat) 现在没人用c++开发网站,是因为没有好的框架。我试着写了一个这样的框架,使用c++开发网站,就类似于用java的servlet,jsp,struts2。 ### 缺点 ### xoskit要求使用者用它的接口来写程序,这样原来基于系统接口的c++代码是没法用xoskit的。也很难修改过来,只有新开发的项目才能用xoskit。其实c++本身就是跨平台的,只要弥合了平台的一点差异,比如线程,文件,同步方法,网络等,跨平台开发还是不难的。 ### 求助 ### xos_encrypt模块用了openssl静态库,我自认为使用方法没错,可是它总是有内存泄漏,vld可以看出来。我没办法查出原因,请了解的人教我。 ### 编译 ### 1. 依赖。本项目中使用到的第三方库,都提前被我在各平台下编译成了静态库。这些编译好的静态库,我新建一个项目,专门存放的: https://gitee.com/helloworldghh/xosbin 编译本项目前,要先把这个项目下载到本地,与xoskit同级目录。 2. 编译输出目录结构 比如我的build输出目录是这样: - D:\vmware\c++\develop\build\x64\BIN\U_D_MD - D:\vmware\c++\develop\build\x64\BIN\U_R_MT ... 其它平台也类似。 3. windows 直接用vs sln编译 4. 其它平台 使用makefile,需要配置好各平台下的编译器,然后就可以编译了:windows(mingw): make OS=x64 G=-g; linux : make OS=linux G=-g; mac : make OS=mac G=-g;android : make OS=android G=-g.