分享

Golang(cgo) 封装 C/C++ 代码的情况,大家是如何组织代码文件的

 quasiceo 2016-11-19

Golang(cgo) 封装 C/C++ 代码的情况,大家是如何组织代码文件的


  •  

  •   mckelvin · 2015-10-16 14:44:05 +08:00 · 561 次点击
    这是一个创建于 400 天前的主题,其中的信息可能已经有所发展或是发生改变。

    http://github.com/douban/libmc 是一个 C++ 和 Python 实现的 memcached 客户端,最近尝试在 C++ 部分基础上封装下做成 Golang 客户端。

    理想的情况下的代码组织是把 golang 代码放到单独的一个目录:

    .
    ├── golibmc
    │   └── golibmc.go
    ├── include
    │   ├── hashkit
    │   │   └── crc32.h
    │   └── libmc.h
    └── src
        ├── hashkit
        │   └── crc32.c
        └── libmc.c
    

    然而 Golang 与 C 交互的工具只认当前.go 文件目录下(甚至不包含子目录)的 *.c , *.cpp 文件,于是不得不把所有子目录下的 C/C++ 文件全放到一个目录,并且把 golang 代码和 C/C++代码也放一块儿。

    .
    ├── golibmc -> src
    ├── include
    │   ├── hashkit
    │   │   └── crc32.h
    │   └── libmc.h
    └── src
        ├── golibmc.go
        ├── hashkit
        ├── hashkit_crc32.c
        └── libmc.c
    

    感觉这么做感觉太恶心了。

    还有种可能的解决方法是把 C/C++部分做成系统包,安装到 /usr/lib/libmc.a 之类的地方,然后 Golang 构建的时候 -l mc , 这样做的缺点是安装这个包无法一步完成,而且还依赖全局安装,不全局安装得配环境变量,对使用者而言非常麻烦。大家有更好的办法吗?

    向官方提议新增一个输入参数 #cgo SOURCE_FILES 方便指定要编译的 C/C++文件,然而官方并不支持的样子: https://github.com/golang/go/issues/12953

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多