1. 程式人生 > >windows下Google Protocol Buffer 編譯安裝使用教程

windows下Google Protocol Buffer 編譯安裝使用教程

轉載修改自:http://kuaile.in/archives/1214

protobuf的全稱是Protocol Buffer,它是google 的一種資料交換的格式,可用於用於分散式應用之間的資料通訊或者異構環境下的資料交換,

最近因為專案的需求,需要接觸Protobuf,在官方提供的壓縮包中,提供了Linux下的編譯指令碼,但是,由於專案在windows下開發,因此,需要在Windows編譯和安裝Protobuf,結合自己的探索,希望能夠幫助到初次接觸到protobuf的朋友

第一、.lib檔案的生成,.h和.cc檔案的生成。

1.下載Google Protocol Buffer原始碼包

下載可以到protobuf官網下載:http://code.google.com/p/protobuf/downloads/list,一般下載第一個或是第二個,因為第一,二個是原始碼包,第三個是可執行檔案

2.解壓壓縮包

解壓壓縮包後,會得到類似於下面的檔案列表:

檔案列表

3.編譯vs工程

  • 在解壓後的資料夾中,開啟vsprojects目錄,目錄中的檔案如圖所示:

vsprotects目錄檔案

開啟libprotobuf.vcproj(這個是vs的工程檔案,開啟前請確認安裝了vs2005 或vs2008,vs2010等等),在開啟工程中,   可能需要轉換工程,直接轉換就行了

開啟後,vs的工程頁面如圖所示:

工程列表

右鍵分別生成libprotobuflibprotobuf-litelibprotocprotoc這四個工程(編譯模式為Release 模式):

  • 生成lib檔案

4.編譯完成

編譯完成後,可以在vsprojects\Release下發現3個lib和一個exe檔案,他們分別是libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.exe :

lib檔案列表

protoc.exe檔案

5.拷貝檔案到windows目錄下:

將得到的libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.exe拷貝到系統盤的windows目錄下。如果你的系統安裝在C盤,那麼就拷貝到c:\windows

目錄下

6.編譯proto檔案,生成c++檔案

假設在E:\test目錄下有一個名為addressbook.proto的proto檔案,那麼開啟CMD,輸入下面的命令就可以生成C++原始碼了:

?
1 protoc.exe -I=e:\ test --cpp_out=e:\ test e:\ test \addressbook.proto

生成c++原始碼檔案

生成了addressbook.pb.h和addressbook.pb.cc檔案,將這個檔案拷貝到需要用到的工程裡就可以直接用了:
生成原始碼檔案成功

至此,protobuf的編譯和使用教程就這麼多了,如果有錯誤的地方,還請多多指出

注:下載的檔案如果沒有vs工程,需要安裝CMake (cmake-gui)生成vs工程目錄,生成後編譯專案會生成libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe四個檔案,第5步可以不把這四個檔案放到系統目錄下,而在第6步cmd視窗編譯.proto檔案時加上這protoc.exe的路徑。經試驗成功生成了.h和.cc檔案



第二、.h和.cc檔案的使用。

1.proto檔案舉例為helloworld.proto:

syntax = "proto3";

package lm;
message helloworld
{
   int32     id = 1;  // ID
   string    str = 2;  // str
   int32     opt = 3;  //optional field
}
生成的.h和.cc檔案為helloworld.h和helloworld.cpp。

2.建立工程,並將生成的.h和.cc檔案引入至工程:

#include "helloworld.pb.h"
#include <iostream>
#include <fstream>
using namespace std;
//…

int main(void) 
{ 
	lm::helloworld msg1; 
	msg1.set_id(101); 
	msg1.set_str("hello"); 

	// Write the new address book back to disk. 
	fstream output("./log", ios::out | ios::trunc | ios::binary); 

	if (!msg1.SerializeToOstream(&output)) { 
		cerr << "Failed to write msg." << endl; 
		return -1; 
	}         
	return 0;
} 


3.附加包含目錄、附加庫目錄、附加依賴項:

附加包含目錄,引入下載的“protobuf-3.5.1\src”目錄:

附加庫目錄,release對應引入release版本的libprotoc.lib、libprotobuf.lib所在目錄,debug對應引入release版本的libprotoc.lib、libprotobuf.lib所在目錄:

附加依賴項,加入libprotoc.lib、libprotobuf.lib:

vs2008開發工具下,這樣配置後仍然報錯:


手足無措的時候,網上查解決辦法,說哪個版本的vs生成的libprotoc.lib、libprotobuf.lib,就要用哪個版本的vs使用這個.lib,於是改用vs2017,發現仍然報錯:

查解決辦法,改執行庫後正常:

編譯執行成功,在工程目錄下生成了“log”檔案。大功告成。