Protobuf C 语言开发 有更新!

  cheney

    Protobuf 支持多种编程语言,我已经试过了 java 和 nodejs,但是 Protobuf 却偏偏没有 C 语言的支持,只有 C++。如果非要用 C ,只能利用第三方工具 protobufc。

    protobufc 的源码在: https://github.com/protobuf-c/protobuf-c, 先使用 docker 环境将 protobufc 编译出来。编译过程依赖 protobuf 的源码和头文件 https://github.com/protocolbuffers/protobuf/releases

    Dockerfile 如下

    FROM ubuntu:latest
    MAINTAINER Cheney "hq@gpio.me"
    RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
    RUN  apt-get clean
    RUN apt-get update
    # 时区
    RUN apt-get install tzdata -y
    RUN rm /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    WORKDIR /workdir
    
    ADD protobuf-all-3.12.3.zip ./
    ADD protobuf-c-master.zip ./
    RUN apt-get install git -y
    RUN apt-get install unzip -y
    RUN apt-get install gcc g++ pkg-config autoconf automake libtool make -y
    RUN unzip protobuf-all-3.12.3.zip
    RUN unzip protobuf-c-master.zip
    RUN cd protobuf-3.12.3/ && ./autogen.sh && ./configure --disable-dependency-tracking --prefix=/usr/local/protobuf --libdir=/usr/lib && make && make install
    RUN cd protobuf-c-master && ./autogen.sh && ./configure && make && make install
    
    
    

    最终编译的工具命令为 protoc-c 而不是 protoc, 编译命令为 protoc-c --c_out=./ Sdk.proto

    如果用到了 Any 类型,还需要额外的文件,都在 /workdir/protobuf-3.12.3/src 目录下能找到, 或者直接在这个目录编译。

    Sdk.proto 编译出来的文件为 Sdk.pb-c.cSdk.pb-c.h, 它们又依赖 protobuf-c/protobuf-c.hany.pb-c.h, protobuf-c/protobuf-c.h 是有的,any.pb-c.h 还是没找到哪里有提供。

    已联系作者,等待解答:https://github.com/protobuf-c/protobuf-c/issues/434