Google protobuf的安裝及使用
阿新 • • 發佈:2019-02-10
最近應為工作的需要,合作的部門提供了protobuf的介面,總結了一下使用的過程和方法如下: 下載protobuf-2.3.0: http://protobuf.googlecode.com/files/protobuf-2.3.0.zip 安裝: unzip protobuf-2.3.0.zip cd protobuf-2.3.0 ./configure make make check make install 結果: Libraries have been installed in: /usr/local/lib Head files hava been installed in: /usr/local/include/google/ protobuf/ 開始寫.proto檔案: BaseMessage.proto: message MessageBase { required int32 opcode = 1; // other: sendMgrId, sendId, recvMgrId, recvId, ... } message BaseMessage { required MessageBase msgbase = 1; } BaseMessage.proto是其它訊息proto檔案的基礎,以容器模組的C2S_GetContainerInfo為例: ContainerMessage.proto: import "BaseMessage.proto"; message C2SGetContainerInfoMsg { required MessageBase msgbase = 1; optional int32 containerType = 2; } .proto檔案編寫規則: 1)所有訊息都需要包含msgbase這項,並編號都為1,即: required MessageBase msgbase = 1; 2)除了msgbase這項寫成required外,其它所有項都寫成optional。 編譯 .proto 檔案 protoc -I=. --cpp_out=. BaseMessage.proto protoc -I=. --cpp_out=. ContainerMessage.proto 生成BaseMessage.pb.h、BaseMessage.pb.cc ContainerMessage.pb.h、ContainerMessage.pb.cc 將它們新增到工程檔案中。 編寫C++程式碼: 1)傳送訊息: C2SGetContainerInfoMsg msg; msg.mutable_msgbase()->set_opcode(C2S_GetContainerInfo); msg.set_containertype(1); std::string out = msg.SerializeAsString(); send(sockfd, out.c_str(), out.size(), 0); 2)接收訊息 char buf[MAXBUF + 1]; int len; bzero(buf, MAXBUF + 1); len = recv(new_fd, buf, MAXBUF, 0); if (len > 0) { printf("%d接收訊息成功:'%s',共%d個位元組的資料/n", new_fd, buf, len); BaseMessage baseMsg; std::string data = buf; baseMsg.ParseFromString(data); int opcode = baseMsg.mutable_msgbase()->opcode(); printf("opcode=%d/n", opcode); switch (opcode) { case C2S_GetContainerInfo: { C2SGetContainerInfoMsg msg; msg.ParseFromString(data); printf("containerType=%d/n", msg.containertype()); break; } default: { break; } } } else { if (len < 0) printf("訊息接收失敗!錯誤程式碼是%d,錯誤資訊是'%s'/n", errno, strerror(errno)); close(new_fd); return -1; } 編譯C++程式碼: Need to link lib: protobuf pthread 參考: 1,http://www.360doc.com/content/10/0822/16/11586_47942017.shtml 2,http://code.google.com/p/protobuf/
原文地址:http://blog.csdn.net/ganghust/article/details/6115283
1、./configure(注:預設可能會安裝在/usr/local目錄下,可以加--prefix=/usr來指定安裝到/usr/lib下,可以免去路徑的設定,路徑設定見Linux命令pkg-config)
2、make
3、make check
4、make install(需要超級使用者root許可權)