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”文件。大功告成。


猜你喜欢

转载自blog.csdn.net/csdndenglu/article/details/80598446