日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

google protobuf安装与使用

發(fā)布時(shí)間:2024/4/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 google protobuf安装与使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  google protobuf是一個(gè)靈活的、高效的用于序列化數(shù)據(jù)的協(xié)議。相比較XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨語(yǔ)言的,并且自帶了一個(gè)編譯器(protoc),只需要用它進(jìn)行編譯,可以編譯成Java、python、C++、C#、Go等代碼,然后就可以直接使用,不需要再寫其他代碼,自帶有解析的代碼。更詳細(xì)的介紹見:?Protocol Buffers

protobuf安裝

1、下載protobuf代碼?google/protobuf

2、安裝protobuf

  tar -xvf protobuf

  cd protobuf

  ./configure --prefix=/usr/local/protobuf

  make

  make check

  make install

至此安裝完成^_^,下面是配置:

(1) vim /etc/profile,添加

  export PATH=$PATH:/usr/local/protobuf/bin/

  export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

  保存執(zhí)行,source /etc/profile。同時(shí)在~/.profile中添加上面兩行代碼,否則會(huì)出現(xiàn)登錄用戶找不到protoc命令。

(2) 配置動(dòng)態(tài)鏈接庫(kù)

  vim /etc/ld.so.conf,在文件中添加/usr/local/protobuf/lib(注意: 在新行處添加),然后執(zhí)行命令: ldconfig

?.proto文件

  .proto文件是protobuf一個(gè)重要的文件,它定義了需要序列化數(shù)據(jù)的結(jié)構(gòu)。使用protobuf的3個(gè)步驟是:

1 在.proto文件中定義消息格式

2 用protobuf編譯器編譯.proto文件

3 用C++/Java等對(duì)應(yīng)的protobuf API來寫或者讀消息

程序示例(C++版)

  該程序示例的大致功能是,定義一個(gè)Persion結(jié)構(gòu)體和存放Persion的AddressBook,然后一個(gè)寫程序向一個(gè)文件寫入該結(jié)構(gòu)體信息,另一個(gè)程序從文件中讀出該信息并打印到輸出中。

1 address.proto文件

package tutorial;message Persion {required string name = 1;required int32 age = 2; }message AddressBook {repeated Persion persion = 1; }

  編譯.proto文件,執(zhí)行命令:?protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto,示例中執(zhí)行命令protoc --cpp_out=/tmp addressbook.proto?,會(huì)在/tmp中生成文件addressbook.pb.h和addressbook.pb.cc。

2 write.cpp文件,向文件中寫入AddressBook信息,該文件是二進(jìn)制的

1 #include <iostream>2 #include <fstream>3 #include <string>4 #include "addressbook.pb.h"5 6 using namespace std;7 8 void PromptForAddress(tutorial::Persion *persion) {9 cout << "Enter persion name:" << endl; 10 string name; 11 cin >> name; 12 persion->set_name(name); 13 14 int age; 15 cin >> age; 16 persion->set_age(age); 17 } 18 19 int main(int argc, char **argv) { 20 //GOOGLE_PROTOBUF_VERIFY_VERSION; 21 22 if (argc != 2) { 23 cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl; 24 return -1; 25 } 26 27 tutorial::AddressBook address_book; 28 29 { 30 fstream input(argv[1], ios::in | ios::binary); 31 if (!input) { 32 cout << argv[1] << ": File not found. Creating a new file." << endl; 33 } 34 else if (!address_book.ParseFromIstream(&input)) { 35 cerr << "Filed to parse address book." << endl; 36 return -1; 37 } 38 } 39 40 // Add an address 41 PromptForAddress(address_book.add_persion()); 42 43 { 44 fstream output(argv[1], ios::out | ios::trunc | ios::binary); 45 if (!address_book.SerializeToOstream(&output)) { 46 cerr << "Failed to write address book." << endl; 47 return -1; 48 } 49 } 50 51 // Optional: Delete all global objects allocated by libprotobuf. 52 //google::protobuf::ShutdownProtobufLibrary(); 53 54 return 0; 55 }

  編譯write.cpp文件,g++ addressbook.pb.cc write.cpp -o write `pkg-config --cflags --libs protobuf` (注意,這里的`符號(hào)在鍵盤數(shù)字1鍵左邊,也就是和~是同一個(gè)按鍵)。

3 read.cpp文件,從文件中讀出AddressBook信息并打印

1 #include <iostream>2 #include <fstream>3 #include <string>4 #include "addressbook.pb.h"5 6 using namespace std;7 8 void ListPeople(const tutorial::AddressBook& address_book) {9 for (int i = 0; i < address_book.persion_size(); i++) { 10 const tutorial::Persion& persion = address_book.persion(i); 11 12 cout << persion.name() << " " << persion.age() << endl; 13 } 14 } 15 16 int main(int argc, char **argv) { 17 //GOOGLE_PROTOBUF_VERIFY_VERSION; 18 19 if (argc != 2) { 20 cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl; 21 return -1; 22 } 23 24 tutorial::AddressBook address_book; 25 26 { 27 fstream input(argv[1], ios::in | ios::binary); 28 if (!address_book.ParseFromIstream(&input)) { 29 cerr << "Filed to parse address book." << endl; 30 return -1; 31 } 32 input.close(); 33 } 34 35 ListPeople(address_book); 36 37 // Optional: Delete all global objects allocated by libprotobuf. 38 //google::protobuf::ShutdownProtobufLibrary(); 39 40 return 0; 41 }

?  編譯read.cpp文件,g++ addressbook.pb.cc read.cpp -o read `pkg-config --cflags --libs protobuf`

4 執(zhí)行程序

?

總結(jié)

以上是生活随笔為你收集整理的google protobuf安装与使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。