1. 程式人生 > >protobuf-c的使用(一)構建

protobuf-c的使用(一)構建

protobuf很出名,是google開發的序列化庫,很多公司都使用它作為介面的資料結構。地址:https://developers.google.com/protocol-buffers/
支援java、c++、go等多種語言,幾乎所有主流語言都支援,但是官方沒給出c語言的支援。經過一番尋找,找到了protobuf-c。在github中有很多protobuf c版本的實現,不過個人感覺還是這個protobuf-c更直接。其github地址:https://github.com/protobuf-c/protobuf-c
在接下來的文章中,我會介紹protobuffer的結構和語法。同時說明protobuf-c的使用。在這篇文章中,先來試試構建protobuf-c。

在構建protobuf-c之前,我們需要安裝一些依賴庫:autoconf、automake、protobuffer、libtool,當然也需要一些基本的系統依賴(如:gcc-c++等)。autoconf、automake和libtool可以直接使用apt-get、yum、brew等安裝。protobuffer雖然也可以使用libprotobuf,不過還是推薦原始碼安裝。這裡有一些坑,我會在下面逐一說明。注意安裝環境這裡只介紹mac和linux,linux採用debian系列的。

一、安裝依賴

下面逐一安裝依賴:

  1. mac下安裝:mac下使用brew安裝,如果讀者沒有安裝brew,請自行參考

    http://www.brew.sh

    sudo brew install autoconf automake libtool 

    這裡寫圖片描述

  2. linux下安裝:debian系列使用apt-get安裝,rhel系列使用yum安裝。

sudo apt-get install automake autoconf libtool

這裡寫圖片描述

二、構建protobuffer

構建protobuffer其實mac和linux上沒任何區別,但是需要注意在mac El Capitan 版本中加入了Rootless,不能使用root對/usr/include進行增刪改。在構建protobuffer和protobuf-c的時候會將一些c的標頭檔案寫到/usr/include下,方便呼叫。所以我們需要把Rootless禁用掉,禁用方法如下:

  1. 重啟mac,按住command+R進入恢復模式
  2. 等待一段時間後,選擇恢復模式使用的語言,進入恢復模式
  3. 開啟終端,輸入csrutil disalble,可以直接禁用Rootless。
  4. 重啟mac。

需要注意,在構建完protobuffer和protobuf-c以後建議恢復Rootless,跟禁用方式相同,只不過把命令改成csrutil enable即可。
下面介紹構建protobuffer,這裡使用2.6.1:

  1. 執行./autogen.sh指令碼,生成configure配置指令碼。

    這裡寫圖片描述

  2. 執行./configure配置,注意最好指定一下安裝引數
    ./configure --prefix=/usr/local/protobuf --
    libdir=/usr/lib

    這裡寫圖片描述

  3. 執行make進行構建
    這裡寫圖片描述
  4. 執行sudo make install安裝
    這裡寫圖片描述

三、構建protobuf-c

注意如果在構建protobuf-c之前沒有安裝protobuf的話,生成protobuf-c的configure檔案肯定會報如下錯誤!!

configure: error: Package requirements (protobuf >= 2.6.0) were not
met:No package ‘protobuf’ found

構建protobuf-c其實跟protobuffer幾乎沒任何區別,也是通過autogen.sh指令碼生成configure配置指令碼,然後執行make和install。但是需要注意的是protobuf-c在構建的時候不會自動把相關標頭檔案拷貝到/usr/include下,需要手動拷貝。

git clone https://github.com/protobuf-c/protobuf-c.git

與構建protobuffer一樣,分別執行:

./autogen.sh

這裡寫圖片描述

./configure --prefix=/usr/local/protobuf-c --libdir=/usr/lib/

注意prefix不要與protobuffer一樣,會覆蓋protobuffer

這裡寫圖片描述

make

這裡寫圖片描述

sudo make install

這裡寫圖片描述

最後把標頭檔案拷貝到/usr/include下

sudo cp -r /usr/local/protobuf-c/include/protobuf-c /usr/include 

相關推薦

protobuf-c的使用構建

protobuf很出名,是google開發的序列化庫,很多公司都使用它作為介面的資料結構。地址:https://developers.google.com/protocol-buffers/ 支援java、c++、go等多種語言,幾乎所有主流語言都支援,但是官

C# C Sharp

無法 文件存儲 選項卡 主函數 one 背景 選擇 數據 過程 C#(C Sharp)是一門編程語言,是DoNet的核心語言,是用來和計算機對話溝通的語言。 編程過程就是對計算機下命令的過程,這些命令寫出來就是代碼。 Visual Studio 是DoNet軟件開發的編程

2014年8月25日,收藏家和殺手——面向對象的C++和C

creat os x tracking -m end gin 知識 數據 我們 近期事情特別多,睡眠也都非常晚,有點精神和身體混亂的感覺,所以想寫寫技術分析文章。讓兩者的我都調整一下。這篇技術分析文章是一直想寫的,當前僅僅是開篇,有感覺的時候就寫寫,屬於拼湊而成,興

碼海拾遺:簡述C++

成員 不同 font 面向過程 用戶 style 基本 color size   C++是Bjarne Stroustrup博士於1982年,在C語言的基礎上引入並擴充了面向對象的概念後發明的一種新的程序語言。就與C語言的淵源而言,C++可以說是C語言的超集,它兼容C的一切

Protobuf使用

參考資料 repeat ase 安裝 新版本 目前 編程 圖片 toc Protobuf使用(一) 前言:     最近由於接手一個支付的項目,他們那邊的網絡請求和數據解析都與我平常接觸的項目不同,數據請求由於保密暫時不能說,但是數據解析用的是Protobuf,於是

ProtoBuf練習

CA sage return scala 源文件 locate 如果 fixed ims 基礎數據類型 protobuf語言的基礎字段類型相當於C++語言的基礎類型 工程目錄結構 $ ls proto/ TFixed.proto TInt.proto TScalar.p

typeScript入門構建環境和數據類型

構建 數量 ESS init ntb 字符串 arr function undefine 最近入坑v-cli 3.0,發現ts越來越常用了,於是開始入坑學習。 1.構建ts環境 npm install -g typescript Mac和vscode用戶可以用以下方式構建

Android TV開發總結構建一個TV app前要知道的事兒

進入 line 指南 col 遠程 引導 允許 方法 imp 原文:Android TV開發總結(一)構建一個TV app前要知道的事兒 版權聲明:我已委托“維權騎士”(rightknights.com)為我的文章進行維權行動.轉載務必轉載所

自制JSON解析庫C++--對JavaScript物件的理解

JSON只有兩種結構:鍵值對和陣列;它們之間可以相互巢狀,形成樹形結構,葉子節點有字串、數字、false、true、null。     在這之前,首先談談對JavaScript核心思想的理解:   在JS的世界裡,沒有類,只有物件,物件怎麼來,通

SpringBoot使用--- 構建簡單的應用

Spring Boot提供了一種新的程式設計正規化,能在最小的阻力下開發Spring應用程式。有了它, 你可以更加敏捷地開發Spring應用程式,專注於應用程式的功能,不用在Spring的配置上多花功 夫,甚至完全不用配置。實際上, Spring Boot的一項重要工作就是讓Spring不再

vue2+vueRouter2+webpack+jsonp構建專案

說明:由於本人已經習慣了git的使用,所以本專案的所有命令都是在git中執行的,若大家有其他跑命令的方式也是可以採取的。 git的使用方法 1.安裝node 安裝好之後,我們在終端輸入以下兩個命令 nod

C#-字串的處理

前言 剛開始還有點跟不上小楊老師的速度,主要還是剛開始C#的學習還不夠熟練,小楊老師說的對,不能光指著課上講的,課下自己要多加練習。 知識點 1.string可以看作是char的只讀陣列。char c = s[1];.例子:遍歷string中的每個元素。 2.C#中字串有一個重要

菜鳥教程C++

一、C++基本語法 C++程式可以定義為物件的集合,這些物件可以通過呼叫彼此的方法進行互動。 物件:物件具有狀態和行為。例如:一隻狗的狀態:顏色、名稱、品種等,行為:搖動、叫喚等。物件是類的例項。 類:類可以定義為描述物件行為/狀態的模組/藍圖。 方法:從基本上說,一個方法表示一種行為。一個類可以包含

protobuf使用android ndk 編譯 protobuf-3.6.x windows

首先建議大家看好版本,環境,有可能因為小的變化會造成編譯有問題:  我的環境是 PC  OS: windows10(沒辦法暫時沒機器); NDK: android-ndk-r17b-windows-x86_64 proto : syntax = "proto

京東技術架構構建億級前端讀服務

作者:張開濤 從入職京東到現在,做讀服務已經一年多的時間了,經歷了各種億級到百億級的讀服務;這段時間也進行了一些新的讀服務架構嘗試,從架構到程式碼的編寫,各個環節都進行了反覆嘗試,壓測並進行調優,希望得到一個自己滿意的讀服務架構。 一些設計原則 無狀態 資料閉環 快取銀彈 併發化 降級開關

SpringCloud學習心得 構建最基礎的SpringCloud專案

首先本系列部落格參照 史上最簡單的 SpringCloud 教程,地址:https://blog.csdn.net/forezp/article/details/70148833根據工作需要,筆者最近研究SpringCloud微服務框架,將最近的學習過程寫下來供大家參考。好,

C++ 資料型別 賦值運算

資料型別轉換 double         float long unsigned int               char/short

使用angularjs1.x構建前臺開發框架——構建基礎架構

在web應用開發中,前臺模組正逐漸變得越來越厚重(這也是大勢所趨,瀏覽器的功能和效能都在迅速提升,一部分本來需要後臺支援的業務邏輯完全可以交給前臺來完成),進而演變出了前臺開發框架,而angularjs就是其中之一。但通常angularjs的學習往往侷限於資料雙向繫結、路由

Django在OS X下的程式設計實戰構建一個部落格系統

廢話少說,直奔主題,你要做事之前需要有一臺電腦,最好是Linux或者OS X,因為我在Macbook pro下工作,所以至少這裡的命令都在OS X下執行通過的。所有程式碼都是單獨一行方便你拷貝。Python程式碼會有>>>的提示,除此之前,沒有特別提示都是

Spring 註解學習手札 構建簡單Web應用

轉載自 http://snowolf.iteye.com/blog/577989 我們將用到如下jar包:  引用 aopalliance-1.0.jar  commons-logging-1.1.1.jar  log4j-1.2.15.ja