網上的教程還是和實際操作有很多區別,在這裏把遇到的幾個問題分享一下。
1.按照全部步驟完成以後, 如果用Visual Studio 2012編譯,會報一個
error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable
this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
的錯誤,原因不解釋了,其實是我自己查了以後也沒看太明白,解決方法是在"stdafx.h"文件中加入下面這句define就可以了
#define _SCL_SECURE_NO_WARNINGS
2)編譯通過以後鏈接的時候,會報以下的錯誤一堆
error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“2”不匹配值“0”
檢測到“RuntimeLibrary”的不匹配項: 值“MDd_DynamicDebug”不匹配值“MT_StaticRelease”
導致的原因,按照 1-3 步驟編譯出的release版本的lib,在PBTest工程的debug模式下形成了調用release模式編譯出的lib文件的問題。
另外2-7步驟選擇的Runtime Library也要相同。
----------------------------- 我是華麗的分割線-----------------------
本文開始將逐漸介紹怎麼使用protocol buffers來完成序列化與反序列化數據的應用,開發環境爲VS2008,語言爲C++,外部庫用的是googlebuffer庫。
1、Google Protocol Buffer庫
1)進入網址 https://code.google.com/p/protobuf/downloads/list 下載最新版本Protocol Buffers full source
2)下載解壓後進入vsprojects文件夾打開protobuf.sln, 高版本的Visual Studio會轉換, 無視, 直接確定完成.
3)右鍵分別生成libprotobuf,libprotobuf-lite,libprotoc,protoc這四個工程(編譯模式爲Release 模式)
4)編譯完成後,可以在vsprojects\Release下發現3個lib和一個exe文件,他們分別是
libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe :
5)將以上文件複製到GoogleProtocolBuffer/lib目錄中,將下載文件夾中的src/google文件複製到
GoogleProtocolBuffer/include目錄中.
2、建立並正確設置項目
1)將步驟1中的GoogleProtocolBuffer文件夾拷貝到你的項目工程裏,如下圖所示:
2)使用編譯器將定義的proto文件編譯成.h與.cc文件,拷貝到項目工程目錄下,如下圖所示:
3)在項目中將.h與.cc文件引用進來,並在addressbook.pb.cc頭部加上一句include "stdafx.h",否則編譯時會報錯
4)打開項目屬性,右鍵項目->Configuration(配置屬性)->C/C++ -》General(常規) ,設置Additional Include Directories(附加包含目錄),如下所示:
5)定位到Configuration(配置屬性) -> Linker(l鏈接器) -> General(常規), 設置Additional Library Directories(附加庫目錄),如下所示
6)定位到Configuration(配置屬性) -> Linker(l鏈接器) -> Input(輸入) -> Additional Dependencies(附加依賴項),如下圖所示:
7)定位到Configuration(配置屬性) -> C/C++-> Code Generation,修改Runtime Library項爲Multi-threaded(/MT),如下圖所示: 通過上述的一些列項目屬性設置,程序可以正確編譯通過了,但是什麼功能都沒有,下篇文章中將介紹怎麼序列化與反序列化我們的數據。