玩 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;
}
9055 次点击
所在节点    程序员
88 条回复
waruqi
2018-08-02 10:34:30 +08:00
@mathzhaoliang 不是再造,仅仅只是封装,统一成跨平台的接口,比如正则,tbox 会去自动检测当前系统是否有 pcre2, pcre,regex 等正则库,如果存在则直接使用(如果有的话,优先使用 pcre2 )

并提供统一的接口,用户不需要关心每个正则库使用的方式,只需要用 tbox 提供的接口实现正则解析后,就可以无缝随意切换到其他正则库上去。
zeromake
2018-08-02 10:39:14 +08:00
@waruqi 好像还不错,就是没有个集中的依赖站点,如果 github 日常被墙就很难受,只有有了集中的依赖站才好做镜像吧。
E1n
2018-08-02 10:42:23 +08:00
呜呜 C 好久没看了,写 C 吃不上饭
xi2008wang
2018-08-02 10:44:11 +08:00
我是看着你代码长大的,不,看着你代码学习 C 的
waruqi
2018-08-02 10:51:28 +08:00
@zeromake 可以自建仓库的,官方 repo,除了 github,还有提供 oschina/gitee 的国内镜像 repo https://gitee.com/tboox/xmake-repo
waruqi
2018-08-02 10:52:35 +08:00
@E1n 跟吃饭没啥关系,我现在主业也不是做 c 的,只要有兴趣就可以玩。
waruqi
2018-08-02 10:53:37 +08:00
@xi2008wang 别这样,把我说老了。。。= =
lurenw
2018-08-02 10:55:15 +08:00
名字有趣,treasure box~

想知道楼主花了多少时间来掌握这些技术栈,累积这么多的知识储备
waruqi
2018-08-02 11:04:27 +08:00
@lurenw 哈哈,就是百宝箱的意思,写这个库快 8 年多了吧,再早之前写过个类似 boost 的 c++模板库,功能跟这个类似,不过后来转 c 了,就重新整了个 c 版本的,用到了现在。
zhuangzhuang1988
2018-08-02 11:12:36 +08:00
头疼 qmake cmake nmake makefile automake scons jam gyp ninja
现在又来了个 xmake
zeromake
2018-08-02 11:13:22 +08:00
@waruqi #45 不是说这个,不提供一个统一的代码仓库,最后就会变得和 `golang` 的一样,一个项目依赖来自各种墙外网点,官方 repo 的方案就需要人手动维护,同步到 oschina/gitee 也是很麻烦。总之如果像 golang 一样的话我宁愿直接下个各个依赖直接放进项目做直接依赖而不是远程依赖。
waruqi
2018-08-02 11:25:50 +08:00
@zeromake 如果要完全同意,不依赖各种墙外各种网点,目前通过源码依赖的方式,不太好做,总归要去下载其他托管的源码地址,只能通过二进制包管理的方式 提供统一仓库,这个维护成本很高,暂时不考虑自己去建立和维护了。

目前 xmake 仅支持源码依赖编译管理的方式,后期会对于非 xmake 的依赖库,适配系统已有的包管理,例如:brew, vcpkg, apt/pacman 等,进行二进制包的 依赖管理和下载。
waruqi
2018-08-02 11:26:48 +08:00
zeromake
2018-08-02 11:34:15 +08:00
@waruqi #52 这个我觉得可以考虑做一个,可以像 pypi 一样,反正这些二进制包都是依赖库维护自己本地打二进制包,偷懒的就只发源码包,最后发现要求和 pypi 十分接近呢,果然是用多了。
waruqi
2018-08-02 11:41:01 +08:00
@zeromake 理论上这样确实会更好,但是这样维护成本太高了,我就一个人,没这么多精力捣鼓哈,而且也不太好推动,暂时只考虑复用现有的第三方包管理工具,而源码依赖编译,如果基于 xmake 的,可以提交 xmake-repo 官方仓库,或者自建私有依赖仓库。
SPACELAN
2018-08-02 11:45:02 +08:00
遇到大神了

顺便问一下,有文件监控之类的事件库么
zeromake
2018-08-02 11:51:10 +08:00
@waruqi 那等我把自己一个 orm 自动转 api 的 py 库做完,用它做个开源依赖站看看,这个到时到 xmake 的 issues 去讨论吧。
waruqi
2018-08-02 11:53:58 +08:00
@SPACELAN 没有,目前仅提供一些最常用、最基础的模块。
waruqi
2018-08-02 11:54:55 +08:00
@zeromake 可以
firenine
2018-08-02 11:58:51 +08:00
有点冒昧,感觉使用并不是很广,只看见楼主几个项目在用,基础库选择的时候还是要比较慎重

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

https://tanronggui.xyz/t/476123

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

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

© 2021 V2EX