1 在網站 http://code.google.com/p/protobuf/downloads/list上可以下載 Protobuf 的源代碼。然后解壓編譯安裝便可以使用它了。
安裝步驟如下所示:
?
也可在https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-3 上面下載這個,我是從上面的網站直接跳轉過來的找到的
?
提取 protobuf-3.0.0-alpha-3
?cd protobuf-3.0.0-alpha-3
sudo sh ./autogen.sh
?./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/lib
?
4 > su ?#root 權限
ldconfig
?
5> 寫消息文件: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 輸出 :
101
hello
8> 寫Makefile文件
- all:?write?reader??
- ??
- clean:??
- ????rm?-f?write?reader?msg.*.cc?msg.*.h?*.o??log??
- ??
- proto_msg:??
- ????protoc?--cpp_out=.?msg.proto??
- ??
- ??
- write:?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`??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
