1. 程式人生 > >在linux中安裝protobuf編譯器和運行時環境

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

version eas 如果 -a java shared 能夠 顯示 fig

為了使用源碼編譯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的有些特征在你的電腦上不能正確工作。如果你堅持安裝,你就需要考慮這個風險。

註解:

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

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