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体积更小,解析速度更快. 目前,手头上的项目有涉及到这个工具,打算仔细研究一番,顺带记录遇到的问题,解决方法,时间足够的话, ...
随机推荐
- 在Hadoop2.2基础上安装Spark(伪分布式)
没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...
- Hadoop分布式集群配置
硬件环境: 安装一个Hadoop集群时,需要专门指定一个服务器作为主节点. 三台虚拟机搭建的集群:(搭建集群时主机名不能一样,主机名在/etc/hostname修改) master机器:集群的主节点, ...
- 嵌入式linux------ffmpeg移植 编码H264(am335x编码H264)
[cpp] view plaincopy <pre name="code" class="cpp"><pre name="code& ...
- Flex父子窗口相互调用
Flex父子窗口相互调用 1.设计思路 (1)子窗口调用父窗口的方法 (2)子窗口做了修改后,返回父窗口,父窗口调用子窗口函数 2.设计源码 (1)父窗口 ParentWindow.mxml: < ...
- Canada Cup 2016 D. Contest Balloons
最近好弱做什么题目都是做一晚上 这是合肥站炼铜后遗症? 这题就是贪心 我已开始还写了1小时---三分-----. #include<bits/stdc++.h> using namespa ...
- WPF基础篇之控件模板(ControlTemplate)
WPF中每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应.我们可以自定义一个模板来替换掉控件的默认模板以便打造个性化的控件. 与Style不同,Style只能改变控件 ...
- 学习一之UML类图
前言 最近在学习程杰老师的<大话设计模式>,觉得非常不错,就做了一些学习笔记和总结.如果对设计模式很感兴趣的,可以直接阅读书籍,相信会有更多的收获. 本人小菜一枚,如果理解的不对的还请多多 ...
- springboot--springboot+mybatis多数据源最简解决方案
说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解 ...
- 【BZOJ2342】双倍回文(回文树)
[BZOJ2342]双倍回文(回文树) 题面 BZOJ 题解 构建出回文树之后 在\(fail\)树上进行\(dp\) 如果一个点代表的回文串长度为\(4\)的倍数 并且存在长度为它的一半的回文后缀 ...
- 【BZOJ3670】动物园(KMP算法)
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) ...