在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的有些特征在你的電腦上不能正確工作。如果你堅持安裝,你就需要考慮這個風險。
註解:
1. 關於安裝位置
如果使用./configure後面不帶-prefix參數,那麽這個包將會安裝到/usr/local。然而,在很多平臺中,/usr/local/lib不是LD_LIBRARY_PATH(用來搜索共享庫)的一部分。你可以把這個目錄添加成為LD_LIBRARY_PATH
./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
例如可以使用如下方式編譯使用protobuf的C++代碼:
c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`
3. 二進制兼容性警告
由於C++的特性,兩個protobuf版本的基本不會有兼容的ABIs。如果你使用一個舊版本的libprotobuf鏈接程序,這個程序一般不能夠使用新版本的動態庫運行。這個問題會在你的程序剛啟動的時候,就被發現。為了避免這種情況,你也可以考慮使用靜態鏈接,方法就是,在編譯時,只安裝靜態庫:
$ ./configure --disable-shared
在linux中安裝protobuf編譯器和運行時環境