protobuf的下载、编译和使用
一 背景
工作中临时需要使用 protobuf v3.0.2 做消息格式转换,折腾了很久才搞定,这里特意做一个记录。
二 准备工作
全程使用的电脑为公司的win7 64位旗舰版,已经预先安装VS2013和cmake3.10.2,需要注意的是,如果cmake版本过低,编译时会提示失败,需要更新的cmake版本,重新执行操作。
下载protobuf源代码,公司内网可以访问github,因此选择从github直接下载ZIP包:v3.0.2.zip,这里解压到 “D:\Documents\Program\Tools”。
三 编译
这里以编译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\cmake
(2)mkdir build & cd build
(3)mkdir x86 & cd x86
(4)mkdir debug & cd debug

此时位于protobuf-3.0.2/cmake/build/x86/debug,这里创建的debug文件夹只是用于存放相关的cmake file配置信息,无特殊含义。
(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文件,此处不做介绍。
四 lib库的使用
为了能够动态地创建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
protobuf的下载、编译和使用的更多相关文章
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- (1)redis下载编译
一.redis下载编译 这里没什么好说的 用的版本是redis-2.8.17 1)redis-server是可执行程序 2)mian函数在redis.c里面 3)如果要修改调试 这届在src目录下 ...
- 下载编译Chrome详细步骤
文章来源:http://blog.csdn.net/allendale/article/details/9262833 参考:http://dev.chromium.org/developers/ho ...
- 更新vs2017 15.9.2后,在指定-T v141_xp情况下载编译会报下面warning MSB8051
更新vs2017 15.9.2后,在指定-T v141_xp情况下载编译会报下面warning: C:\Program Files (x86)\Microsoft Visual Studio\2017 ...
- Spring源码研究--下载-编译-导入eclipse-验证
一,环境配置 操作系统:Unbutu14.04LTS JDK: 1.8.0_40 git: 1.9.1 gradle: 2.2.1 二,源码下载-编译-导入eclipse-验证 1,下载 使用git直 ...
- webrtc所有平台下载编译步骤详细说明
webrtc所有平台下载编译步骤详细说明 1.安装depot tools Windows:国外下载:https://storage.googleapis.com/chrome-infra/depot_ ...
- 下载编译 Android wear 源代码,尝试制作可穿戴设备功能
体验 Android Wear 缘由: Android wear 代码公布已经非常久了.一直没有尝试,这里是个编译的过程和步骤,假设要尝试.本文假定读者已经有下载编译 Android 的经验,假设没 ...
- Android 程序分析环境搭建-Android 9 -代码下载编译
Android 9 -代码下载编译 一,翻墙下载: 1.背景: 背景: 现在Android framework 开发的同学,整体在公司里面解一些无关痛痒的bug,对于Android framework ...
- protobuf 系列 ---------下载、编译与使用
protobuf是谷歌开发并开源的二进制序列化工具,比常用的xml,json体积更小,解析速度更快. 目前,手头上的项目有涉及到这个工具,打算仔细研究一番,顺带记录遇到的问题,解决方法,时间足够的话, ...
随机推荐
- mac 系统安装 eclipse 方法
经过好几天的折腾,终于在各种不靠谱的经验.说明的忽悠中把自己心爱的 mac 安装上了 eclipse,看到别人的不靠谱,我决定自己写一篇经验,为了大家能够不走我这么多的弯路,也为了自己将来可以回来看看 ...
- ip2long的用法
ip2long:将IPv4的ip地址(以小数点分隔形式)转换为int Description int ip2long ( string ip_address ) 如果ip地址非法,返回FALSE(PH ...
- 【php】strtr与str_replace的区别
strtr(string,from,to): 逐个字符开始替换,以from跟to中长度较较短的一个为准,例如: strtr("aidenliu","ai",&q ...
- HighCharts之2D含有负值的面积图
HighCharts之2D含有负值的面积图 1.HighCharts之2D含有负值的面积图源码 AreaNegative.html: <!DOCTYPE html> <html> ...
- Filter的注册2
既然Filter是一种COM组件,使用前就必须先注册.Filter的注册程序为regsvr32.exe (位于操作系统目录的system32子目录下).假设现在有一个Filter文件,它的完整路径为C ...
- js、css动态压缩页面代码
1.js.css动态压缩页面代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...
- OpenStack_I版 2.keystone部署
生成keystone默认证书,指定用户 修改keystone主配置文件 第625行,修改数据库连接方式 修改完成同步数据库 同步完成可以查看数据库是否有表生成 为了以后调试keystone方便,现 ...
- CodeM资格赛 Round A 最长树链
按照题解的做法,对于每一个质约数分别进行讨论最长链就行 对于每一个数的质约数可是比logn还要小的 比赛的时候没人写,我也没看 = =,可惜了,不过我当时对于复杂度的把握也不大啊 #include & ...
- js、css等引入文件路径正确,却报404的解决办法
问题的原因,一般是web.xml文件的过滤器给设置"/"或者"/*"全部拦截了,你可以这样设置过滤器,"*.html"等,就可以正常引用文件 ...
- RSS简介
1.RSS(Really Simple Syndication)简介 1.定义 对于网站:RSS 是一种使用 XML 向许多其他的网站分发自己网站上的网络内容的方法. 对于用户:RSS ...