1 在網站 http://code.google.com/p/protobuf/downloads/list上可以下載 Protobuf 的原始碼。然後解壓編譯安裝便可以使用它了。安裝步驟如下所示: tar -xzf protobuf-2.1.0.tar.gz cd protobuf-2.1.0 ./configure --prefix=/usr/local/protobuf make make check make install 2 > sudo vim /etc/profile 添加export PATH=$PATH:/usr/local/protobuf/bin/export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/儲存執行source /etc/profile同時 在~/.profile中添加上面兩行代碼,否則會出現登入使用者找不到protoc命令3 > 配置動態連結程式庫路徑sudo vim /etc/ld.so.conf插入:/usr/local/protobuf/lib4 > su #root 許可權ldconfig5> 寫訊息檔案:msg.proto
package lm; message helloworld { required int32 id = 1; // ID required string str = 2; // str optional int32 opt = 3; //optional field }
將訊息檔案msg.proto映射成cpp檔案protoc -I=. --cpp_out=. msg.proto可以看到產生了msg.pb.h 和msg.pb.cc
6> 寫序列化訊息的進程write.cc
#include "msg.pb.h"#include <fstream>#include <iostream>using namespace std;int main(void) { lm::helloworld msg1; msg1.set_id(101); msg1.set_str("hello"); fstream output("./log", ios::out | ios::trunc | ios::binary); if (!msg1.SerializeToOstream(&output)) { cerr << "Failed to write msg." << endl; return -1; } return 0; }
編譯 write.cc g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf` -lpthread 執行write ./write, 可以看到產生了log檔案
7> 寫還原序列化的進程reader.cc
#include "msg.pb.h"#include <fstream>#include <iostream>using namespace std;void ListMsg(const lm::helloworld & msg) { cout << msg.id() << endl; cout << msg.str() << endl; } int main(int argc, char* argv[]) { lm::helloworld msg1; { fstream input("./log", ios::in | ios::binary); if (!msg1.ParseFromIstream(&input)) { cerr << "Failed to parse address book." << endl; return -1; } } ListMsg(msg1); }
編譯:g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf` -lpthread執行./reader 輸出 :101hello
8> 寫Makefile檔案
all: write readerclean: rm -f write reader msg.*.cc msg.*.h *.o logproto_msg: protoc --cpp_out=. msg.protowrite: msg.pb.cc write.cc g++ msg.pb.cc write.cc -o write `pkg-config --cflags --libs protobuf`reader: msg.pb.cc reader.cc g++ msg.pb.cc reader.cc -o reader `pkg-config --cflags --libs protobuf`