1. 程式人生 > >Protobuf 在Ubuntu 14.04上的編譯與使用

Protobuf 在Ubuntu 14.04上的編譯與使用

轉自:http://www.linuxidc.com/Linux/2016-01/127505.htm

前言

一直知道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上的包

[email protected]:~/protobuf/protobuf$ git diff
diff --git a/autogen.sh b/autogen.sh
index 5b4c29f..f2abf77 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -31,7 +31,7 @@ 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.0.zip
  rm gmock-1.7.0.zip
  mv gmock-1.7.0 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: 6
# PASS:  6
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

接下來就是跟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 = 1;
repeated string column = 2;
}

message TableProto {
repeated string column = 1;
repeated string row = 2;
}


•產生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

[email protected]:~/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.10: cannot open shared object file: No such file or directory

解決方案

sudo ldconfig

相關推薦

嘗試在ubuntu 14.04編譯並啟動linux-2.6.32內核

嘗試 編譯 generic gre 生成 sudo tail rect uil 在ubuntu 14.04上編譯並啟動linux-2.6.32內核 [環境]$ cat /etc/issueUbuntu 14.04.5 LTS \n \l $ uname -aLinux Ui

ProtobufUbuntu 14.04編譯使用

轉自:http://www.linuxidc.com/Linux/2016-01/127505.htm 前言 一直知道Google開源的一個與語言無關的資料交換協議:protobuf。只知道是一種不同於json和XML的格式,還有就是效能特別的好(這在Java和C++

Ubuntu 14.04使用CMake編譯MXNet原始碼操作步驟(Python)

MXNet原始碼版本號為1.3.0,其它依賴庫的版本號可參考:https://blog.csdn.net/fengbingchun/article/details/84997490 。            為了通過編譯原始碼支援p

Ubuntu 14.04使用CMake編譯MXNet原始碼操作步驟(C++)

MXNet原始碼版本號為1.3.0,其它依賴庫的版本號可參考:https://blog.csdn.net/fengbingchun/article/details/84997490 build.sh指令碼內容為: #! /bin/bash real_path=$(realpath $0

ubuntu 14.04原始碼編譯安裝php7

wget https://downloads.php.net/~ab/php-7.0.0alpha2.tar.bz2 //用winscp把下載好的檔案上傳到網站中 tar jxf php-7.0.0alpha2.tar.bz2 安裝: sudo apt-get upda

如何在Ubuntu 14.04利用jexus搭建支持php+mysql數據庫的網站服務

建立數據庫 wordpress rpc 一個 upd chmod lca chm spel 準備部分:sudo apt-get update sudo apt-get install unzip -y第一部分:安裝jexus 在終端運行以下命令

Ubuntu 14.04設置生產環境可用的Node.js

nodejs在Ubuntu 14.04上設置生產環境可用的Node.js提供:ZStack社區前言Node.js是一個開源的JavaScript運行時環境,開發者可以用它方便的構建服務器端應用和網絡應用。Node.js可在Linux、OS X、FreeBSD和Windows上運行,在其上運行的應用使用Java

基於Ubuntu 14.04 LTS編譯Android4.4.2原始碼

轉自:http://blog.csdn.net/gobitan/article/details/24367439 基於Ubuntu 14.04 LTS編譯Android4.4.2原始碼         Dennis Hu 2014-4-21 環境準備: 基

在64位的ubuntu 14.04 開展32位Qt 程式開發環境配置(pro檔案中增加 QMAKE_CXXFLAGS += -m32 命令)

為了能中一個系統上開發64或32位C++程式,費了些周折,現在終於能夠開始幹過了。在此記錄此時針對Q5.4版本的32位開發環境配置過程。 1. 下載Qt 5.4 的32位版本,進行安裝,安裝過程中會發現一些32位的庫沒有安裝,根據提示的錯誤逐個安裝上即可。 2. 開啟一個SampleCode 中的cube

Ubuntu 14.04安裝WineTMQQ2013麒麟版

我先後試用了longterm團隊的2013版本號,參見本博連結 http://blog.csdn.net/tao_627/article/details/17524597 和麒麟官網給出的這個改進版本號,參見連結 http://www.ubuntukylin.com

ubuntu 14.04LIFT: Learned Invariant Feature Points 環境配置所踩過的坑流過的淚(3)

1.重灌nvidia 顯示卡驅動 2.重灌cuda8.0和cudnn 3。重新測試 看來執行不能用sudo 最後也沒管 2. theano nvcc compiler not found on $PATH 重新配置檔案 解決方案:重灌了一遍cuda 和c

如何在Ubuntu 14.04備份、恢復及遷移MongoDB資料庫

MongoDB可謂目前人氣最高的NoSQL資料庫引擎之一。其憑藉著出色的可擴充套件性、可靠性與易用性徵服了無數使用者。今天,我們將共同探討如何備份、恢復及遷移MogoDB資料庫。 對資料庫進行匯入與匯出意味著需要以人類可讀的格式處理資料,且確保其與其它軟體

如何在Ubuntu 14.04利用jexus搭建支援php+mysql資料庫的網站服務

準備部分:sudo apt-get update          sudo apt-get install unzip -y第一部分:安裝jexus    在終端執行以下命令    cd /tmp    wget https://www.linuxdot.net/down/jexus-5.8.2-x64.

Ubuntu 14.04驅動開發環境配置,及最簡單一個驅動編寫。

開發ubuntu 14.04 本機使用的驅動程式。 安裝開發工具:* apt-get install build-essential 建2個檔案: 最簡單的驅動程式碼 Hello.c /*0 * hello.c * * Created on: May 14, 2

Ubuntu 14.04用BIND配置一個私有網路DNS伺服器

系列教程 本教程為7篇系列中的第6篇:DNS管理簡介 前言 伺服器管理中很重要的一部分就是設定一個有效的域名系統(DNS),這樣可以方便的通過網路名稱連線到指定的IP地址和埠。使用有效域名(FQDN)相比IP的好處是,它們簡化了服務和應用的網路配置,提

Ubuntu 14.04+MatlabR2016b 編譯COCO matlab API

前言 最近需要用到COCO的matlab api,但是github上的master分支最近刪除了maskApi.mexa64檔案。一種方法當然是找找別人原來fork的cocoapi,我想自己編譯生成。 編譯器準備 編譯的時候需要用到mex,但是matlab

Ubuntu 14.04解決zip格式檔案解壓檔名亂碼問題

大家在使用ubuntu(linux)系統中難免要解壓一些zip結尾的壓縮檔案,由於Windows與ubuntu作業系統的格式問題,所以使用unzip時難免解壓亂碼問題, 解決方法: 需要再安裝一個解壓工具:      sudo apt-get install unar 然

Ubuntu 14.04編譯安裝Vim7.4

原文連線:http://www.linuxidc.com/Linux/2016-04/129774.htm 1、下載Vim74和適合7.4版本的vim-gdb:         如果已經通過軟體中心安裝了vim,則需要將其解除安裝 sudo apt-get r

Ubuntu 18.04編譯Linux核心

一、環境說明 編譯環境我選擇了Ubuntu 18.04的虛擬機器,核心截止2018-10-14最新版為4.18.14,筆者即將編譯這個版本 請確保磁碟空間足夠,筆者之前20G編譯到最後空間不足,還得重來 二、編譯步驟 下載核心原始碼 下載到的檔案存

Ubuntu 14.04安裝最新版mesa

sudo apt-get install x11proto-gl-dev sudo apt-get install x11proto-dri2-dev sudo apt-get install x11proto-dri3-dev sudo apt-get install x11proto-present