工做中臨時須要使用 protobuf v3.0.2 作消息格式轉換,折騰了好久才搞定,這裏特地作一個記錄。html
全程使用的電腦爲公司的win7 64位旗艦版,已經預先安裝VS2013和cmake3.10.2,須要注意的是,若是cmake版本太低,編譯時會提示失敗,須要更新的cmake版本,從新執行操做。git
下載protobuf源代碼,公司內網能夠訪問github,所以選擇從github直接下載ZIP包:v3.0.2.zip,這裏解壓到 「D:\Documents\Program\Tools」。github
這裏以編譯32位的debug版本爲例,若是是release版本,能夠將各條命令中的debug路徑修改成release路徑,最關鍵的一點是將第5條命令中的 「-DCMAKE_BUILD_TYPE=Debug」 修改成 「-DCMAKE_BUILD_TYPE=Release」。多線程
選擇「開始 - 全部程序 - Visual Studio 2013 - Visual Studio Tools」,雙擊「VS2013 x86 本機工具命令提示」,依次輸入:工具
(1)cd D:\Documents\Program\Tools\protobuf-3.0.2\cmakeui
(2)mkdir build & cd buildgoogle
(3)mkdir x86 & cd x86線程
(4)mkdir debug & cd debugdebug
此時位於protobuf-3.0.2/cmake/build/x86/debug,這裏建立的debug文件夾只是用於存放相關的cmake file配置信息,無特殊含義。3d
(5)cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=../../../../install/x86/debug ../../..
生成cmake file相關配置文件。
(6)nmake
等待protobuf編譯完成,大概10分鐘。
(7)nmake install
完成後會在 protobuf-3.0.2\install\x86\debug 目錄下生成 bin、include、lib、cmake 四個文件夾。
bin文件夾中的 protoc.exe 程序能夠直接拿來轉換.proto文件,此處不作介紹。
爲了可以動態地建立message對象,修改message參數,須要調用上面編譯出的lib庫文件,利用protobuf中的反射機制實現。
新建C++工程,工程右鍵,選擇屬性,配置頭文件和lib庫文件,注意第2點:
(1)「C/C++ - 常規 - 附加包含目錄」,新增 「D:\Documents\Program\Tools\protobuf-3.0.2\install\x86\debug\include」;
(2)」C/C++ - 代碼生成 - 運行庫」,選擇 「多線程調試(/MTd)」,與protobuf保持一致,不然編譯不過;
(3)「連接器 - 常規 - 附加庫目錄」,新增 」D:\Documents\Program\Tools\protobuf-3.0.2\install\x86\debug\lib」;
(4)」連接器 - 輸入 - 附加依賴項」,新增 「libprotobufd.lib;libprotobuf-lited.lib;libprotocd.lib;」
在編譯v3.0.2版本以前,也嘗試過最新的v3.3.0版本,編譯過程都沒有出問題,在使用lib庫時,編譯出錯,先是 「generated_message_table_driven.h」 文件找不到,後是 「metadata_lite.h」 文件找不到,我從 「protobuf-3.3.0\src\google\protobuf」 文件夾下將這兩個頭文件copy到 「protobuf-3.3.0\install\x86\debug\include\google\protobuf」 中,編譯經過(一樣須要按第四步進行配置),這應該是版本自身的Bug。
參考博客:https://www.cnblogs.com/tongy0/p/7119778.html