在linux中安裝protobuf編譯器和運行時環境


為了使用源碼編譯protobuf,需要下面的工具:

autoconf, automake, libtool, make, g++, unzip

如果你使用ubuntu/debian,你可以使用如下方式安裝這些工具:

$ sudo apt-get install autoconf automake libtool curl make g++ unzip

在其他系統中,請使用對應的包管理工具安裝這些必要的工具。

為了獲得源碼,可以從如下的地址下載一個.tag.gz包或者.zip包,這個取決於自己的喜好。

https://github.com/protocolbuffers/protobuf/releases/latest

如果你只需要C++,下載protobuf-cpp-[version].tar.gz,如果你還需要使用其他語言,例如java,你可以只下載protobuf-java-[version].tar.gz(每一個包中都已經包含了C++源碼),如果你除了C++,還需要多種語言,下載protobuf-all-[version].tar.gz

為了編譯和安裝C++ Protocal Buffer運行環境和Protocol Buffer編譯器(protoc),執行下面的指令:

$ ./configure --prefix=... (下面會講解)

$ make      # 這個步驟時間可能會很長

$ make check    # 這個步驟時間可能會很長

$ sudo make install

$ sudo ldconfig # refresh shared library cache.

如果”make check”失敗了,你仍然可以安裝,但是protobuf的有些特征在你的電腦上不能正確工作。如果你堅持安裝,你就需要考慮這個風險。

編譯proto文件的方法參考下面這條語句:

protoc --cpp_out=. addressbook.proto

注解:

1. 關於安裝位置

如果使用./configure后面不帶-prefix參數,那么這個包將會安裝到/usr/local。然而,在很多平台中,/usr/local/lib不是LD_LIBRARY_PATH(用來搜索共享庫)的一部分。你可以把這個目錄添加成為LD_LIBRARY_PATH的一部分,你也可以將protobuf安裝到/usr。為了實現這個效果,調用./configure的時候,使用如下語句:

./configure --prefix=/usr

如果在一個系統中需要同時使用多個protobuf版本,可以考慮將protobuf安裝到各自的文件夾中,然后顯示指定LD_LIBRARY_PATH,從而避免沖突。

如果你已經將protobuf構建到一個不同的前綴(prefix),先調用”make clean”, 然后再重新構建一次。

2. 編譯依賴包

為了編譯一個使用protobuf的包,你需要傳入各種參數給編譯器和鏈接器。2.2.0版本開始,protobuf可以使用pkg-config得到這些參數。如果你已經安裝了pkg-config,你可以調用如下指令來獲取這些參數:

pkg-config --cflags protobuf # print compiler flags

pkg-config --libs protobuf # print linker flags

pkg-config --cflags --libs protobuf # print both

 

在我的電腦中,

pkg-config --cflags protobuf 輸出 -pthread -I/usr/local/include

pkg-config --libs protobuf 輸出 -L/usr/local/lib -lprotobuf -pthread

 

例如可以使用如下方式編譯使用protobufC++代碼:

c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`

 3. 二進制兼容性警告

由於C++的特性,兩個protobuf版本的基本不會有兼容的ABIs。如果你使用一個舊版本的libprotobuf鏈接程序,這個程序一般不能夠使用新版本的動態庫運行。這個問題會在你的程序剛啟動的時候,就被發現。為了避免這種情況,你也可以考慮使用靜態鏈接,方法就是,在編譯時,只安裝靜態庫:

$ ./configure --disable-shared

 

以上只是安裝完成了C++版本的proto的編譯環境,對於其他語言,需要安裝額外的插件,這里只講述go語言,因為我使用go語言比較多。

首先記得安裝go的開發環境,這點,我不打算說明。

最簡單安裝go插件的方式是:

go get -u github.com/golang/protobuf/protoc-gen-go

go的插件是protoc-gen-go,調用過上面的指令后,如果$GOBIN沒有被設置,這個插件會被安裝在$GOPATH/bin目錄,如果$GOBIN和$GOPATH都沒有設置,默認應該在~/go/bin目錄。我們需要將protoc-gen-go所在的目錄添加到$PATH目錄中,否則在調用如下語句時:

protoc -I=. --go_out=. addressbook.proto

會報錯:

protoc-gen-go: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1.
如果想要安裝一個特定版本的protoc-gen-go(從而對應proto包的版本),可以采取的方式如下:

GIT_TAG="v1.2.0" # change as needed

go get -d -u github.com/golang/protobuf/protoc-gen-go

git -C "$(go env GOPATH)"/src/githubcom/golang/protobuf checkout $GIT_TAG

go install github.com/golang/protobuf/protoc-gen-go


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM