在C语言环境下使用google protobuf

        本文写给常常使用C编程且不喜欢C++而又要常常使用google protobuf的人。
        常常写通信程序的人对数据进行序列化或者反序列化时,可能常常使用google的protobuf(PB),其优势多多,不用我在这里赘述。
        google官方的PB能够跨语言使用,惟独缺了C语言。礼失求诸野,我在网上找到了一个非官方的protobuf-c,其官方网址是http://code.google.com/p/protobuf-c/,使人奇怪的是这么好的东东从2011年下半年后再无更新,使人遗憾。
        使用这个工具以前固然是先安装它了。安装它以前请先下载最新版本的protobuf并安装它,而后再安装protobuf-c。
        PB的安装过程以下:
        1 到PB官方网站 https://code.google.com/p/protobuf/ 下载PB的安装包,如protobuf-2.5.0.tar.gz;
        2 用命令tar -zxf protobuf-2.5.0.tar.gz 对压缩包解压;
        3 进入解压后的源码目录 cd protobuf-2.5.0;
        4 在linux 上以root权限执行下列命令./configure --prefix=/usr/local/protobuf &&  make && ake check && make install
        5 在/etc/profile中添加下列两行:
                export PATH=$PATH:/usr/local/protobuf/bin/
                export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
           在你home目录下的~/.bashrc添加下列两行:
                export PATH=$PATH:/usr/local/protobuf/bin/
                export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
        6 仍然以root身份打开/etc/ld.so.conf,添加下面一行:
                /usr/local/protobuf/lib linux

         7 以root身份执行命令ldconfig。编程

         而后安装PC,安装步骤以下:bash

        1 直接点击 这里直接下载我修改过的PC安装包myprotobuf-c-0.15.xz(请放心下载,只要你有csdn帐号,就能够下载,下载时候不须要分数);
        2 用命令tar -Jxf myprotobuf-c-0.15.xz对压缩包进行解压;
        3 进入源码目录protobuf-c-0.15,在此处可查看change_list.txt文件,里面说明了我对源码的修改之处;
        4 在linux以root身份执行安装命令./configure --prefix=/usr/lib64/protobuf_c CXXFLAGS=-I/usr/lib64/protobuf/include LDFLAGS=-L/usr/lib64/protobuf/lib64 && make && make install
        5 在/etc/profile和~/.bashrc中修改PATH等变量结果,修改结果以下: 函数

                export PATH=/usr/lib64/protobuf/bin:$/usr/lib64/protobuf_c/bin:PATH工具

                export PKG_CONFIG_PATH=usr/lib64/protobuf/lib64/pkgconfig:  /usr/lib64/protobuf_c/lib64/pkgconfig
               注意这里的结果已经把上面PB的修改结果也包含进去了。
        6 仍然以root身份打开/etc/ld.so.conf,添加下面一行:
                /usr/lib64/protobuf_c/lib64/
        7 以root身份执行命令ldconfig。  post

        安装完成后,能够写代码了。PC编译proto文件的命令格式是protoc-c --c_out=./   test.proto。测试

        你们能够先写几个简单的程序测试下它的有效性,protobuf-c(PC)官方网址http://code.google.com/p/protobuf-c/wiki/Examples 里面就有不少很好的测试用例。 网站

        使用事后,可能有的见解有:
        1 PC的API太简单了,没法与PB相提并论;
        2 proto文件中定义的message被PC转换为源码时,相应的class名称被改变,且函数名称也是不甚明了。
        针对第一见解,本文不予讨论,由于本文开头第一段就说明了使用PC的是不喜欢C++的人,PC的API虽简单而这正体现了C的灵活性。
        我属于持有第二种见解的人,原PC的class名称和message名称不一致并且不简短,class的函数名称也是不够简洁。原PC遵循New BSD License,因此为了达到目的------我直接把PC的源码修改了。
        我修改的代码已经上传到csdn的资源库中,请点击 这里下载。依我往常的惯例,零分下载,欢迎你们有问题或者疑问随时跟我联系,个人email是alexstocks@foxmail.com。
        个人测试用例也一并上传,请点击 这里下载。
        请你们看看测试用例中的pc_public.h文件,相信你们会体会到宏的好处。
        另外,你们仔细查看测试用例的makefile中INC和LIB两个变量的值,你们本身使用个人PC写程序的时候尽可能加上这两个变量或者直接参考个人makefile进行修改,以防止本身的程序在编译或连接的时候出问题。
        侯捷说过“源码以前,了无密码”,此乃至理名言。本篇blog能够算做是个人测试用例的readme,但愿有心人仔细去看个人测试用例。 google

        是记也,原创url是 http://write.blog.csdn.net/postedit/16107201, 不经容许,不得转载。url

        此毕。

相关文章
相关标签/搜索