玩 c 的同学快进来,推荐个跨平台 c 库给你们

2018-08-02 07:46:13 +08:00
 waruqi

最近终于腾出时间把两年前的 issues#24给解决了,现在 windows 上已经完全支持基于 IOCP 的协程 io 处理。

大家有兴趣的话,或者有需要用 c 开发跨平台程序的同学可以关注下哦,里面有各种常用模块,并且提供了灵活的裁剪编译模式,方便大家只编译使用需要的模块。

摆着代码即文档的原则,实现接口都有详细注释说明,同时 TBOX 也是个代码仓库,大家如果在写系统程序的时候,一些系统接口的使用可以在 tbox 的源码的 platform 目录中搜索,找到相关实现来做参考哦。

前两天刚好发了新版本(v1.6.3),花了我一年多时间修复了各种问题,不过中途又跑去捣鼓xmake(一个基于 lua 的跨平台编译工具)了,大家也可以关注下,嘿嘿。

简介

TBOX 是一个用 c 语言实现的跨平台开发库。

针对各个平台,封装了统一的接口,简化了各类开发过程中常用操作,使你在开发过程中,更加关注实际应用的开发,而不是把时间浪费在琐碎的接口兼容性上面,并且充分利用了各个平台独有的一些特性进行优化。

这个项目的目的,是为了使 C 开发更加的简单高效。

目前支持的平台有:

通过xmake支持各种编译模式:

如果你想了解更多,请参考:

特性

流库

针对 http、file、socket、data 等流数据,实现统一接口进行读写,并且支持: 阻塞、非阻塞、异步 三种读写模式。 支持中间增加多层 filter 流进行流过滤,实现边读取,内部边进行解压、编码转换、加密等操作,极大的减少了内存使用。

主要提供以下模块:

协程库

数据库

xml 库

内存库

容器库

算法库

网络库

数学运算库

libc 库

libm 库

object 库

平台库

压缩库

字符编码库

实用工具库

正则表达式库

一些使用 tbox 的项目:

编译

请先安装: xmake

# 默认直接编译当前主机平台
$ cd ./tbox
$ xmake

# 编译 mingw 平台
$ cd ./tbox
$ xmake f -p mingw --sdk=/home/mingwsdk 
$ xmake

# 编译 iphoneos 平台
$ cd ./tbox
$ xmake f -p iphoneos 
$ xmake

# 编译 android 平台
$ cd ./tbox
$ xmake f -p android --ndk=xxxxx
$ xmake

# 交叉编译
$ cd ./tbox
$ xmake f -p linux --sdk=/home/sdk #--bin=/home/sdk/bin
$ xmake

例子

#include "tbox/tbox.h"

int main(int argc, char** argv)
{
    // init tbox
    if (!tb_init(tb_null, tb_null)) return 0;

    // trace
    tb_trace_i("hello tbox");

    // init vector
    tb_vector_ref_t vector = tb_vector_init(0, tb_element_cstr(tb_true));
    if (vector)
    {
        // insert item
        tb_vector_insert_tail(vector, "hello");
        tb_vector_insert_tail(vector, "tbox");

        // dump all items
        tb_for_all (tb_char_t const*, cstr, vector)
        {
            // trace
            tb_trace_i("%s", cstr);
        }

        // exit vector
        tb_vector_exit(vector);
    }

    // init stream
    tb_stream_ref_t stream = tb_stream_init_from_url("http://www.xxx.com/file.txt");
    if (stream)
    {
        // open stream
        if (tb_stream_open(stream))
        {
            // read line
            tb_long_t size = 0;
            tb_char_t line[TB_STREAM_BLOCK_MAXN];
            while ((size = tb_stream_bread_line(stream, line, sizeof(line))) >= 0)
            {
                // trace
                tb_trace_i("line: %s", line);
            }
        }

        // exit stream
        tb_stream_exit(stream);
    }

    // wait 
    getchar();

    // exit tbox
    tb_exit();
    return 0;
}
8704 次点击
所在节点    程序员
88 条回复
zeromake
2018-08-02 09:08:11 +08:00
遗憾的是如果能做成打包并分发到在线依赖下载就好了,支持打包当前平台然后共享。
也可以打包源码加 xmake 多平台编译方式,类似 python 的 pip 里的带 c 扩展类的包。
我觉得已经有很多人做了支持 xmake 编译的库,没有一种好的分享方式。
首先需要定义一个打包规范,linux 各种库的包实质就是单平台单版本的库分发。
ifanze
2018-08-02 09:10:47 +08:00
支持!向大佬学习!
catcn
2018-08-02 09:11:42 +08:00
代码里边好多多余的注释
waruqi
2018-08-02 09:18:39 +08:00
@zeromake xmake 有提供自己的打包规范,执行 xmake package,就可以打包出 xxx.pkg 包(支持多 arch,多平台),其他基于 xmake 的项目,也可以直接快速使用,并且 xmake 目前正在开发包管理 3.0,对于支持 xmake 的依赖库,可以支持依赖下载管理。

如果你有兴趣的话,可以看下这个演示视频: https://asciinema.org/a/140338

和对应的 issues: https://github.com/tboox/xmake/issues/69 虽然对于非 xmake 的依赖库,还支持不完善,但是对于支持 xmake 的依赖库,目前已经可以通过依赖管理的方式使用了,并且可以自建依赖仓库,或者上传至官方仓库: https://github.com/tboox/xmake-repo
waruqi
2018-08-02 09:19:45 +08:00
@catcn 是有很多冗余,不过我习惯了敲几行带点绿,看着舒爽。。= =
tt67wq
2018-08-02 09:29:30 +08:00
看不懂,先摩拜
q397064399
2018-08-02 09:36:30 +08:00
老哥 有机会整个 cmake , 编译这东西 建议用 广泛使用的工具,这样集成的时候也方便,,像 Java maven 一个 denpency 就完事,然后就是愉快的敲代码了
freemon
2018-08-02 09:39:40 +08:00
膜一个
allgy
2018-08-02 09:58:22 +08:00
mark 有时间读一读大佬的源码
alamaya
2018-08-02 10:00:48 +08:00
真大佬
axeojpwt
2018-08-02 10:03:06 +08:00
准备拜读一下楼主的代码,看起来代码很优雅,第一眼就很美观。
MarcoQin
2018-08-02 10:03:40 +08:00
star 了,很多功能的聚合,看起来很方便
waruqi
2018-08-02 10:03:43 +08:00
@axeojpwt 谢谢
waruqi
2018-08-02 10:06:54 +08:00
@q397064399 cmake 个人不喜欢,所以才自己整的 xmake,不过对于其他习惯使用 cmake 的用户来说,整合 tbox 库确实不方便了,我后期会考虑在 xmake 加个,自动导出生成 CMakeList.txt 的功能,来方便与 cmake 的集成。
Applenice
2018-08-02 10:10:09 +08:00
已 star,膜拜大佬
Yggdroot
2018-08-02 10:10:30 +08:00
👍👍👍
aice114
2018-08-02 10:16:06 +08:00
厉害厉害,楼主堪称注释狂魔
boywhp
2018-08-02 10:16:35 +08:00
向大佬低头, 玩 C 的惹不起惹不起
mathzhaoliang
2018-08-02 10:18:03 +08:00
楼主的项目很好,我有个疑问,非抬杠:数据结构,正则这些东西都有现成的成熟库,自己再造一遍轮子的话,如果造的比那些库还好,那当然好。若只是实现一个较弱的版本,意义似乎不大?
closedevice
2018-08-02 10:21:45 +08:00
牛逼~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/476123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX