# 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++跨平台开发时,遇到的各平台特性不同,导致代码充满宏定义,难以维护问题的。
### 原理 ###

图1: xoskit原理
### 特点 ###
1. 各平台分别实现接口功能
2. 各平台的接口实现,编译为模块
3. 模块采用动态库形式。这是因为静态库虽然可以编译进程序,编译时却要链接一堆有关无关的库,实难管理
4. 模块导出一个create方法,用来创建管理者接口
5. 管理者接口可以创建模块内所有功能接口
6. 除了基本跨平台功能,xoskit也提供了程序开发需要的其它功能
7. xoskit引入了一些常用库,并以静态库的形式封装编译进了xoskit的动态库。
8. xoskit保存了常用库在各平台上的静态库文件,方便编译xoskit。但这导致了xoskit项目很庞大。带来的好处是,xoskit对外界没有任何依赖,使用极其方便。
9. 使用接口带来的一个好处是,没有编译依赖,只要包含了接口文件就可以编译。
### 结构 ###

图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.