gRPC系列之Protobuf的安裝和使用
Protobuf是Protocol Buffers的簡(jiǎn)稱,它是Google公司開發(fā)的一種數(shù)據(jù)描述語(yǔ)言,并于2008年對(duì)外開源。Protobuf剛開源時(shí)的定位類似于XML、JSON等數(shù)據(jù)描述語(yǔ)言,通過附帶工具生成代碼并實(shí)現(xiàn)將結(jié)構(gòu)化數(shù)據(jù)序列化的功能。但是我們更關(guān)注的是Protobuf作為接口規(guī)范的描述語(yǔ)言,可以作為設(shè)計(jì)安全的跨語(yǔ)言PRC接口的基礎(chǔ)工具。
1.安裝Protocol Buffers
1.1 Ubuntu下,源碼安裝
從github上下載自己想要的版本,建議下載all版本 ,我下載的是protobuf-all-3.10.0.zip包
下載好后,解壓,切換到對(duì)應(yīng)根目錄下,編譯安裝:
protobuf默認(rèn)安裝在 /usr/local 目錄
你可以修改安裝目錄通過 ./configure --prefix=命令
雖然我是root用戶但覺得默認(rèn)安裝過于分散,所以統(tǒng)一安裝在/usr/local/protobuf下
$./configure --prefix=/usr/local/protobuf
$ make //編譯未編譯的依賴包 #要編譯很久
$ make check //檢查依賴包是否完整
$ make install //開始安裝Protocol Buffer
添加到系統(tǒng)的環(huán)境變量中:
vim /etc/profile
打開配置文件,在該文件中添加下面內(nèi)容,配置環(huán)境變量:
####### add protobuf lib path ########
#(動(dòng)態(tài)庫(kù)搜索路徑) 程序加載運(yùn)行期間查找動(dòng)態(tài)鏈接庫(kù)時(shí)指定除了系統(tǒng)默認(rèn)路徑之外的其他路徑
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(靜態(tài)庫(kù)搜索路徑) 程序編譯期間查找動(dòng)態(tài)鏈接庫(kù)時(shí)指定查找共享庫(kù)的路徑
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#執(zhí)行程序搜索路徑
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序頭文件搜索路徑
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序頭文件搜索路徑
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路徑
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
######################################
然后保存退出,執(zhí)行:
source /etc/profile
檢查 Protocol Buffer 是否安裝成功
// 在終端下輸入
protoc --version
1.2 Windows下安裝
從github上下載windows版本的Protocol Buffers,我下載的是 protoc-3.10.0-win64.zip
下載好后直接解壓,就可以運(yùn)行了
但是如果要再任意的地方運(yùn)行,需要將其添加到環(huán)境變量中,如圖所示:

打開終端,輸入:
λ protoc --version
libprotoc 3.10.0
成功!?。?/p>
2.簡(jiǎn)單的使用
proto語(yǔ)言編寫參考 go語(yǔ)言高級(jí)編程
切換到要使用的proto文件路徑下,并打開cmd窗口執(zhí)行以下命令:
protoc --java_out=${OUTPUT_DIR} path/to/your/proto/file
例子:
我的.proto文件放在本目錄下,希望java版本的proto文件也輸出到本目錄下,則:
protoc --java_out=./ test_hello.proto
如果是c++版本的話則需要寫成:--cpp_out
其他版本的輸出,可以參考下圖:

輸出之后程序命名一般為:
test_hello_pb2.py或TestHello.java格式,根據(jù)語(yǔ)言而變化