在Windows下使用Protobuf的示例
Protobuf全稱為Google ProtoBuf,它是由Google開(kāi)源的項(xiàng)目鸯屿,類似于接口定義語(yǔ)言(IDL),作為一種數(shù)據(jù)交換格式,適用于跨平臺(tái)數(shù)據(jù)通訊時(shí)的消息編碼和解碼泰讽。本文演示了在Windows下如何在C++語(yǔ)言環(huán)境下使用Protobuf媚赖。關(guān)鍵步驟為:
定義數(shù)據(jù)交換格式(proto文件)
利用protoc實(shí)用工具把proto文件編譯成C++頭文件和庫(kù)文件
利用mwc構(gòu)建工具把生成的頭文件和庫(kù)文件編譯成動(dòng)態(tài)鏈接庫(kù)
在項(xiàng)目工程中引用這個(gè)庫(kù)進(jìn)行消息編碼和/或解碼
在使用前敞峭,需要先構(gòu)建protoc實(shí)用工具和protobuf開(kāi)發(fā)庫(kù)兴使。
* Windows 7
* Visual Studio 2015 社區(qū)版
* ACE 6.4.4
* mwc 4.1.25 (in ACE )
* Active Perl 5.22.1
* git 2.9.0 windows.1
* sed 4.2.2 (in git)
* CMake 3.9.1
* Protobuf 3.4.0 (當(dāng)前最新發(fā)行版)
安裝Active Perl
mwc依賴Perl
安裝 git
在編譯庫(kù)時(shí)港柜,需要利用git環(huán)境下的sed工具动壤,修改生成的頭文件.
安裝 CMake
構(gòu)建protoc工具及開(kāi)發(fā)庫(kù)時(shí)需要用到CMake工具。
在Windows下正確編譯ACE (x64)
從源代碼中構(gòu)建protoc及開(kāi)發(fā)庫(kù)
從github上獲得protobuf的源代碼
mkdir demo
mkdir build
cd demo
git clone --recursive -b v3.4.0 https://github.com/google/protobuf.git
利用CMake生成基于Visual Studio 2015的解決方案工程文件
cd build
cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=/usr/local? -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_SHARED_LIBS=ON ../demo/protobuf/cmake
用Visual Studio打開(kāi)上一步生成的protobuf.sln文件酥诽,編譯生成鞍泉。執(zhí)行INSTALL工程,可以將編譯的結(jié)果輸出到/usr/local目錄下
設(shè)置生成的路徑為當(dāng)前盤(pán)符的/usr/local肮帐,這是我的個(gè)人喜好咖驮,目的是跟linux下的路徑一致,因?yàn)榻^大數(shù)時(shí)候训枢,還是工作在linux環(huán)境下的托修。
生成動(dòng)態(tài)鏈接庫(kù) -Dprotobuf_BUILD_SHARED_LIBS=ON
不編譯測(cè)試代碼 -Dprotobuf_BUILD_TESTS=OFF
定義數(shù)據(jù)交換格式文件
syntax="proto3";
package GP.Msg;
message Header
{
uint32 cmd = 1;? //消息號(hào)
uint32 sn = 2;? ? //消息序號(hào)
string token = 3; //消息令牌
}
生成動(dòng)態(tài)鏈接庫(kù)
利用ACE提供的工具generate_export_file.pl生成導(dǎo)出文件,這個(gè)文件后面要用到恒界。
cd libDemo
generate_export_file.pl GP_PROTOC > GP_Protoc_Export.h
利用protoc實(shí)用工具生成c++頭文件和源文件,參見(jiàn)libDemo/g.sh睦刃。這一步由于要使用sed,所以需要進(jìn)入到git bash環(huán)境中來(lái)運(yùn)行十酣。
protoc? --cpp_out=dllexport_decl=GP_PROTOC_Export:. Demo.proto
sed -i '21 c #include "GP_Protoc_Export.h"' Demo.pb.h
protoc有dllexport_decl指令用于方便生成的代碼能編譯成動(dòng)態(tài)庫(kù)涩拙,但是我還不知道用什么指令來(lái)在生成的*.pb.h中增加包含的頭文件,所以只好用sed來(lái)強(qiáng)行修改耸采。如果您知道有更好的辦法兴泥,請(qǐng)告訴我。
接下來(lái)利用mwc工具生成構(gòu)建文件虾宇。mwc工具類似于CMake搓彻,本文件暫不多作討論,如果有需要更詳細(xì)的介紹嘱朽,請(qǐng)給我留言旭贬。這里直接給出操作指令。
rem 當(dāng)前路徑 libDemo
mwc.pl -type vc14
以上指令能生成 libDemo.sln文件,用Visual Studio編譯可得libDemo.dll, libDemo.lib
在自己的工程中使用動(dòng)態(tài)庫(kù)進(jìn)行編碼或解碼
rem 當(dāng)前路徑 DemoApp
mwc.pl -type vc14
以上指令能生成 DemoApp.sln文件,用Visual Studio編譯可得DemoApp.exe,運(yùn)行結(jié)果如下:
C:\workspace\win-protobuf\windows-protobuf\src\lib>DemoApp.exe
cmd: 1
sn: 123
token: "abcde"
??{??abcde
cmd = 1
sn =123
token =abcde