ProtoBuffer由.proto文件生成.cc/.h

一:编译源码
下载地址:http://code.google.com/p/protobuf/downloads/list 
下载后,根据编译说明进行编译。
windows 平台,直接打开msvc中的工程文件,直接编译。
unix/Linux平台,先进行configure,在make。

[下载和编译过程不详述,请看这里]

生成的结果中有库文件有:
libprotobuf.lib

libprotobuf-lite.lib

libprotoc.lib

可执行文件有:
protoc.exe

头文件:
根据提供的extract_includes.bat文件,提取公共头文件。

二:编写proto文件
根据需要,编写proto文件。

补充一条:如果想使用libprotobuf-lite.lib(会使二进制体积小一些),则在.proto文件的头部声明:

option optimize_for = LITE_RUNTIME;

三:生成头文件
编写完proto文件后,接下来,用protoc.exe生成.h和.cc文件。
命令如下:
protoc.exe -proto_path=SRC --cpp_out=DST SRC/checklist.proto 
其中--proto_path指出proto文件所在的目录,--cpp_out则是生成的代码文件要放的目录,最后的一个参数指出proto文件的路径。如上述命令中可以看出,将SRC目录下的addressbook.proto编译后放在DST目录下,应该会生成checklist.pb.h和checklist.pb.cc文件

四:Notepad++挂接ProtoBuffer代码生成器protoc

手动用proto文件生成.h/.cc文件比较麻烦,可以借用notepad++的插件一劳永逸

在插件菜单NppExec(如果没有就先装这个插件)->Execute弹出的对话框中输入以下信息

  1. "protoc.exe" --cpp_out $(CURRENT_DIRECTORY) --proto_path $(CURRENT_DIRECTORY) $(FULL_CURRENT_PATH)

protoc.exe的路径可以自己指定本机的绝对路径

编译出的文件将自动放置到proto文件所在目录

五:与工程进行集成
需要把生成的.h和.cc导入到工程中去,在需要用到数据解析的文件中,引用该.h文件。
需要把libprotobuf.lib(或libprotobuf-lite.lib)添加到项目的依赖库中。

补充一条:一般用vs编的时候,默认需要在.cpp/.cc文件头部加预编译头文件#include "stdafx.h",但这又会修改.cc文件(原则上生成的.h/.cc文件不要修改),所以解决的方法就是:在VS的solution explorer中右键checklist.pb.cc-->属性-->预编译头(precompiled header)->预编译头(precompiled header)-->选择“不使用预编译头”("not using precompiled headers")

六:推荐做法:
建立文件夹pbbuff,在其中创建3个子文件夹:bin,lib,include,其中:
bin 存放proto.exe文件 
lib 存放libprotobuf.lib 文件
include 存放公共头文件
创建环境变量PBROOT,指向pbbuff文件。把%PBROOT%/bin添加到系统的环境变量PATH中,以便能识别protoc命令。

【参考:http://yleesun.blog.163.com/blog/static/294134022011112102117958/】

ProtoBuffer由.proto文件生成.cc/.h的更多相关文章

  1. 【grpc proto】python使用proto文件生成简易的服务端和客户端

    1.安装python-grpc(注意,是grpcio包,不是grpc包!) pip install grpcio 2.编写.proto文件 grpc教程:http://doc.oschina.net/ ...

  2. 不同目录有同名proto文件情况下,protoc生成.cc/.h

    首先先参考一下别人的博客,看完了,看懂了,再回过头来看我下面说的情况. 链接 https://blog.csdn.net/CAir2/article/details/78201572 但是这个也就是基 ...

  3. grpc proto文件生成java、.net实体类以及客户端代码

    背景 工作中对接对方服务是GRPC,对方只提供了proto契约文件,需要自己生成对应的实体类以及客户端代码,故记录下操作流程. Java 代码生成 实体类: 通过protoc插件生成实体类 在 htt ...

  4. proto文件生成对应的js和ts文件

    安装protobuf 先要安装node.js,然后用npm安装protobuf npm install -g protobufjs 生成js文件 单个文件 pbjs -t static-module ...

  5. 解决proto文件生成pb文件时提示(e.g."message")的问题

    原因:格式不支持 解决办法:去下个notepad,打开方式选择notepad,文件属性的只读取消掉 打开后会发现最下面显示了文件的格式是unix,utf-8 右键红框处,选择转换为windows格式, ...

  6. Caffe源码中caffe.proto文件分析

    Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件. 在src/caffe/proto目录下有一个 ...

  7. ArcCore重构-生成%_offset.h文件

    基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5 基本问题   ArcCore中,需要生成asm_offset.h和arch_offset.h这两个头文件,定义着代 ...

  8. 配置caffe过程中,生成解决方案出错。无法打开包括文件: “gpu/mxGPUArray.h”

    ------ 已启动生成: 项目: matcaffe, 配置: Release x64 ------12> MatlabPreBuild.cmd : Create output director ...

  9. gsoap 学习 1-由wsdl文件生成h头文件

    开始前先看一下用户向导吧 http://www.cs.fsu.edu/~engelen/soap.html 中左侧点击Documentation 英语水平确实有限,有些内容可能说的不准确,敬请参考向导 ...

随机推荐

  1. Ajax向Controller发送请求并接受数据需要注意的一个细节

    想用Ajax想向Controller发送请求和接收返回的字符等等.Controller中要使用@ResponseBody注解. <script type="text/javascrip ...

  2. VS2013没有安装部署,安装图解

    自vs2012后就已经没有安装向导了,VS2013安装是不带安装部署的,用 InstallShield Limited Edition for Visual Studio 解决安装部署问题 第一步:“ ...

  3. iOS 数据库sqlite3.0操作--超简单--看我就够啦

    iOS客户端数据存储的方式有很多,下面主要是介绍苹果自带的sqlite3.0的使用方法. 首先导入sqlite3.0的框架.然后导入头文件#import <sqlite3.h>就行了 下面 ...

  4. 十八、IntelliJ IDEA 常用快捷键 之 Windows 版

    IntelliJ IDEA(简称 IDEA),是 Java 语言开发的集成环境,IDEA 在业界被公认为最好的 Java 开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE 支持.各类版本 ...

  5. [转]ASP.NET如何获取上传图片尺寸(是指宽高)

    1.采用客户端javascript可以取得图片大小 <input id="FileUpload" type="file" size="27&qu ...

  6. HDU 2897 邂逅明下 ( bash 博弈变形

    HDU 2897 邂逅明下 ( bash 博弈变形 题目大意 有三个数字n,p,q,表示一堆硬币一共有n枚,从这个硬币堆里取硬币,一次最少取p枚,最多q枚,如果剩下少于p枚就要一次取完.两人轮流取,直 ...

  7. 【Nginx】使用Nginx作为Http代理的配置文件

    请看配置文件中的注释~ #user nobody; worker_processes 1; #pid logs/nginx.pid; events { worker_connections 1024; ...

  8. C# 泛型的协变和逆变 (转载)

    1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量. 协变和逆变是两个相互对立的概念: ...

  9. 使用java原生API模拟请求下载文件

    /** * * @param urlPath * 下载路径 * @param saveDir * 下载存放目录 * @return 返回下载文件 * @throws Exception */ publ ...

  10. mysql update 子查询锁表问题

    mysql在Update带有子查询的时候,子查询的表会锁住,导致该表无法使用.比如 update A set comments = (select count(1) from B where id = ...