1、從這裡下載protobuf-2.6.1.tar.gz到桌面,並解壓,解壓後的資料夾為protobuf-2.6.1。(我的桌面為C:\Users\mcl\Desktop)
2 、進入資料夾protobuf-2.6.1\vsprojects\,用vs2010開啟其中的sln檔案,然後生成解決方案(然後這個vs就可以關閉了)。 之後在protobuf-2.6.1\vsprojects\Debug下會有一個protoc.exe,並且還有一些其他的lib檔案等。
3、在你vc的lib資料夾下新建一個google資料夾,然後將protobuf-2.6.1\vsprojects\Debug下的全部檔案都拷貝進去。
4、將C:\Users\mcl\Desktop\protobuf-2.6.1\src資料夾下的google資料夾拷貝到vs的include資料夾下。
5、新建一個vs工程,比如我在桌面上新建了一個GoogleProtoStudy的工程,然後將protobuf-2.6.1\examples下面的Makefile檔案拷貝到GoogleProtoStudy\GoogleProtoStudy下(注意這個資料夾下應該有有vcxproj,filters等檔案)。這個時候那個protobuf-2.6.1的資料夾可以全部刪掉了。
6、接著在GoogleProtoStudy\GoogleProtoStudy資料夾下新建一個person.proto的檔案,內容如下:
package tutorial; message Person {
optional string dim=1;
repeated int32 num=2;
} message Student{
optional Person p=1;
}
7、在工程的屬性->配置屬性->連結器->輸入,在右側的“附加依賴項”中輸入libprotobuf.lib,libprotoc.lib(注意分兩行,每行一個)。然後在屬性->配置屬性->連結器->常規,在右側的“附加庫目錄”中加入剛才vc目錄下lib下那個google資料夾的路徑,比如我的是"D:\vs2010\VC\lib\google"。
8、然後新建一個main.cpp,在其中寫上如下程式碼:(注意把所有的目錄改成你相關的目錄)。然後執行,就會把剛才的person.proto編譯成一個.h檔案和一個.cpp檔案。
#include <iostream>
#include <string> using namespace std; void trans()
{
std::string S="D:\\vs2010\\VC\\lib\\google\\protoc.exe \
-I=C:\\Users\\mcl\\Desktop\\GoogleProtoStudy\\GoogleProtoStudy \
--cpp_out=C:\\Users\\mcl\\Desktop\\GoogleProtoStudy\\GoogleProtoStudy \
C:\\Users\\mcl\\Desktop\\GoogleProtoStudy\\GoogleProtoStudy\\person.proto";
system(S.c_str());
} int main()
{
trans(); system("pause"); return 0;
}
9、把剛才生成的檔案加入到工程中,就可以使用了。
#include <iostream>
#include <string>
#include "person.pb.h" using namespace std;
using namespace tutorial; void trans()
{
std::string S="D:\\vs2010\\VC\\lib\\google\\protoc.exe \
-I=C:\\Users\\mcl\\Desktop\\GoogleProtoStudy\\GoogleProtoStudy \
--cpp_out=C:\\Users\\mcl\\Desktop\\GoogleProtoStudy\\GoogleProtoStudy \
C:\\Users\\mcl\\Desktop\\GoogleProtoStudy\\GoogleProtoStudy\\person.proto";
system(S.c_str());
} int main()
{
//trans(); Person a;
a.add_num(1);
a.add_num(4);
a.add_num(5);
a.set_dim("hello world"); for(int i=0;i<a.num_size();i++) cout<<a.num(i)<<endl; //輸出1 4 5
cout<<a.dim()<<endl; //輸出 hello world Student b;
b.set_allocated_p(&a); Person* A=b.mutable_p();
cout<<A->dim()<<endl; //輸出 hello world system("pause");
return 0;
}