前言

一直知道Google开源的一个与语言无关的数据交换协议:protobuf。只知道是一种不同于json和XML的格式,还有就是性能特别的好(这在Java和C++的实现确实是!)

最近闲下来看了下Google的Protobuf的相关东西,然而baidu出来的东西很多都过时了,我不得不花些时间来倒腾,于是就有了如下的内容。

  • 下载源代码与准备工作
$ sudo apt-get install autoconf automake libtool curl
$ git clone https://github.com/google/protobuf
$ cd protobuf
  • 修改autogen.sh

由于“你懂的”的原因,autogen无法curl下载到gmock的源代码包,所以我把gmock的包放到了自己的github上。修改autogen.sh,让它下载我github上的包

peter@ubuntu14:~/protobuf/protobuf$ git diff
diff --git a/autogen.sh b/autogen.sh
index 5b4c29f..f2abf77
--- a/autogen.sh
+++ b/autogen.sh
@@ -, +, @@ fi
# directory is set up as an SVN external.
if test ! -e gmock; then
echo "Google Mock not present. Fetching gmock-1.7.0 from the web..."
- curl $curlopts -O https://googlemock.googlecode.com/files/gmock-1.7.0.zip
+ curl $curlopts -L -o gmock-1.7.0.zip https://github.com/peter-wangxu/gmock/archive/1.7.0.zip
unzip -q gmock-1.7..zip
rm gmock-1.7..zip
mv gmock-1.7. gmock

#把curl那一行替换成绿色的

  • 产生configure文件
$ ./autogen
  • 编译与安装protobuf
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.

NOTE: 默认是安装在“/usr/local/lib”下的,在有些平台/usr/local/lib不是默认的LD_LIBRARY_PATH变量里面,可以在通过如下命令改变安装目录

$ ./configure --prefix=/usr

当看到类似下面的文字,说明protobuf基本安装完成

============================================================================
Testsuite summary for Protocol Buffers 3.0.0-beta-2
============================================================================
# TOTAL:
# PASS:
# SKIP:
# XFAIL:
# FAIL:
# XPASS:
# ERROR:
============================================================================

接下来就是跟Python语言相关的一些配置了

  • 安装protobuf的Python支持
cd python # 位于protobuf下
sudo python setup.py install

NOTE: 如果上面命令失败,你可以试试安装下pip的相关包,可以解决些python包的依赖问题

sudo apt-get install python-pip

接下来就是使用protobuf了

  • 编译.proto文件
$ touch DataService.proto
# 放入以下内容 message RowProto {
required uint32 null_map = ;
repeated string column = ;
} message TableProto {
repeated string column = ;
repeated string row = ;
}
  • 产生py文件,供后面的Python使用
protoc --python_out=. ./DataService.proto
  • protobuf的使用

创建TestDataService.py文件,放入下面内容

import sys
import DataService_pb2 #create proto
row = DataService_pb2.RowProto()
row.null_map = 1
row.column.append("wang")
row.column.append("female")
row_str=row.SerializeToString()
print "row_str:", row_str
table = DataService_pb2.TableProto()
table.column.append("name")
table.column.append("gender")
table.row.append(row_str)
table_str = table.SerializeToString() #process proto
table_proto = DataService_pb2.TableProto()
table_proto.ParseFromString(table_str)
print "column:"
print table_proto.column row_str = table_proto.row[0]
row_proto = DataService_pb2.RowProto()
row_proto.ParseFromString(row_str.encode('utf8'))
print "row1:"
print row_proto.column

运行TestDataServer.py

peter@ubuntu14:~/protobuf/proto_test$ python TestDataService.py
row_str: wangfemale
column:
[u'name', u'gender']
row1:
[u'wang', u'female']

本期的内容就这样了,主要是protobuf的安装与配置,使用涉及的很少,后面有时间会加入更多的使用相关的内容


FAQ:

如果遇到:

protoc: error while loading shared libraries: libprotoc.so.: cannot open shared object file: No such file or directory

解决方案

sudo ldconfig

参考文章:

https://github.com/google/protobuf

http://blog.csdn.net/whuqin/article/details/8730026

Protobuf 在Ubuntu 14上的编译与使用的更多相关文章

  1. 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码

    原文网址:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码       ...

  2. 基于Ubuntu 14.04 LTS编译Android4.4.2源码

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS ...

  3. 基于Ubuntu 14.04 LTS编译Android4.4.2源代码

    转载自:雨水:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码     ...

  4. VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP

    PJSIP是一个开源的SIP协议栈.它支持多种SIP的扩展功能,可说算是最目前流行的SIP协议栈之一了.  它实现了SIP.SDP.RTP.STUN.TURN和ICE.PJSIP作为基于SIP的一个多 ...

  5. [Linux 小技巧] Ubuntu 14.04 下编译、安装、配置最新开发版 GoldenDict

    1. 背景介绍 GoldenDict 是一款非常优秀的跨平台电子词典软件,支持 StarDict.Babylon 等多种词典.其 PC 版基于 Qt 编写,完全免费.开源且没有广告.GoldenDic ...

  6. ubuntu 14.04.5 编译Android 4.4.4 r1源码(最新)

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54426189 吐槽:ubuntu系统真是让人又爱又恨,也有可能是VMware Wo ...

  7. 在Ubuntu 14 上安装 Nginx-RTMP 流媒体服务器

    一:RTMP RTMP流媒体协议是 一套 Adobe 开发的音频视频实时传输协议: 二:Nginx-rtmp nginx-rtmp 是一个基于nginx的 RTMP服务模块,开源,免费 https:/ ...

  8. Ubuntu 14.10 下编译Hadoop2.4.0

    在http://www.aboutyun.com/thread-8130-1-1.html 这里看到到,安装过程遇到了上面说的问题,所以将此文转载过来,以备不时之需,感谢此作者. 问题导读: 1.如果 ...

  9. ubuntu 14上安装mysql离线包

    1.下载mysql在linux下离线安装包文件:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2. ...

随机推荐

  1. PHP + Memcache 实现Session共享

    一.安装Memcache和PHP扩展 Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd ...

  2. doubango地址配置

    转自:http://wiki.sip2sip.info/projects/sip2sip/wiki/SipDeviceConfiguration SIP Device Configuration Th ...

  3. oracle的位图索引和函数索引

    1.位图索引 位图索引适用于性别.婚姻状态.行政区等只有几列固定值的类型列,身份证号等就不适合位图索引,位图索引适用于静态数据,频繁更新的字段不适用建立位图索引,因为更新会导致索引块区的变更,还会引起 ...

  4. # C#不登录电脑启动程序

    我们知道开机自启动程序如果在用户不登录的情况下是不启动的,但是服务类程序是可以跨过用户登录启动的,例如IIS服务,SQL服务.如果我们已经写好了桌面应用程序,又希望他开机自启动,那就需要借助系统服务在 ...

  5. [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板  一块 2.DS3231 ...

  6. LPC4370使用学习:GPIO的引脚功能使用,和12864OLED模拟I2C驱动

    一: 手中有块LPC4370的开发板,因为便宜,所以引脚引出的不多,而且只有基本的底板资源驱动代码和例程. 看着手册和例程看了老半天,写程序写了半天,结果GPIO老是驱动不起来,因为引脚配置寄存器中有 ...

  7. ECMAScript 6 笔记(五)

    Iterator和for...of循环 1. Iterator(遍历器)的概念 Iterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环 遍历器(Iterato ...

  8. j2se 总结

    j2se在学习第二遍的时候,感觉还是比较亲切的.

  9. java文件读写操作类

    借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...

  10. 【easyui】之treegrid的分页

    easyui官网给的treegrid的分页是相当的复杂,我们来简化一下! 首先treegrid 分页和 datagrid一样需要设置一系列参数! 如下: depTreeGrid=$("#de ...