Protobuf V3.1 Windows VS2012編譯與使用
本教程針對使用VC++的用戶。
1.準備環境:
Windows7 以上的電腦
Visual studio2012 以上,protobuf 3.x後支持語法爲C++11
2.工程準備:
1.protobuf:
官方地址:https://github.com/google/protobuf/tags
2.gmock:根據ReadMe要求選擇1.7
官方地址:https://github.com/google/googlemock/tags
3.gtest:根據ReadMe要求選擇1.7
官方地址:https://github.com/google/googletest/tags
4.cmake
官方地址:https://cmake.org/
=========================================下載後需要將文件按照以下位置進行放置:protobuf->gmock->gtest
========================Cmake生成工程:
生成前準備:
修改VS下的配置文件:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xstddef
修改:
文件時只讀類型,先修改屬吧
最後用Cmake:
=======================================VS工程編譯成功。
還是繼續說說這兩天使用中出現的問題,和大家關心的Json吧?可能大家並不關心!
1.已知bug[可能不是bug,但需要求證就寫了出來]:
環境:win7 運行庫 MT Release VS2012
報錯:在SharedDtor 釋放部分進行報錯,於是看到了我對象的申明方式是棧區中申明的:
函數結束後報錯。於是索性就改成堆區並手動delete(當然C++11 是可以用智能指針,經過驗證也沒有問題)
2.大家關心的Json序列化問題
#include <google/protobuf/util/json_util.h>
void main()
{
// LiveUpdateData PB生成的類
std::shared_ptr< LiveUpdateData > ptr( new LiveUpdateData() );
std::string json;
// 執行這句後就會生成json,不知道爲什麼。官方在序列化時間:如2016年12月12日的時候,會去掉年月日變成:20161212
MessageToJsonString(*ptr, &json);
}
另外給出已經編譯好了的C++ VS2012的庫,使用的時候請注意把運行時Debug改成MTD,Relase改成MTD。如需更多請按照自己的需求編譯吧!!
下載地址:http://download.csdn.net/detail/zouwei678/9707765