一 背景

  工作中临时需要使用 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的下载、编译和使用的更多相关文章

  1. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  2. (1)redis下载编译

    一.redis下载编译 这里没什么好说的 用的版本是redis-2.8.17 1)redis-server是可执行程序 2)mian函数在redis.c里面 3)如果要修改调试 这届在src目录下   ...

  3. 下载编译Chrome详细步骤

    文章来源:http://blog.csdn.net/allendale/article/details/9262833 参考:http://dev.chromium.org/developers/ho ...

  4. 更新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 ...

  5. Spring源码研究--下载-编译-导入eclipse-验证

    一,环境配置 操作系统:Unbutu14.04LTS JDK: 1.8.0_40 git: 1.9.1 gradle: 2.2.1 二,源码下载-编译-导入eclipse-验证 1,下载 使用git直 ...

  6. webrtc所有平台下载编译步骤详细说明

    webrtc所有平台下载编译步骤详细说明 1.安装depot tools Windows:国外下载:https://storage.googleapis.com/chrome-infra/depot_ ...

  7. 下载编译 Android wear 源代码,尝试制作可穿戴设备功能

    体验 Android Wear 缘由: Android wear 代码公布已经非常久了.一直没有尝试,这里是个编译的过程和步骤,假设要尝试.本文假定读者已经有下载编译 Android  的经验,假设没 ...

  8. Android 程序分析环境搭建-Android 9 -代码下载编译

    Android 9 -代码下载编译 一,翻墙下载: 1.背景: 背景: 现在Android framework 开发的同学,整体在公司里面解一些无关痛痒的bug,对于Android framework ...

  9. protobuf 系列 ---------下载、编译与使用

    protobuf是谷歌开发并开源的二进制序列化工具,比常用的xml,json体积更小,解析速度更快. 目前,手头上的项目有涉及到这个工具,打算仔细研究一番,顺带记录遇到的问题,解决方法,时间足够的话, ...

随机推荐

  1. 什么是 JSX

    JSX 即 JavaScript XML--一种在 React 组件内部构建标签的类 xml 语法.React 在不使用 JSX 的情况下一样可以工作,然而使用 JSX 可以提高组件的可读性,因此推荐 ...

  2. 整理几个js上传多张图片的效果

    一.普通的上传图片,张数不限制 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"&g ...

  3. Linux定时器 timerfd使用

    英文使用手册原汁原味,一手资料. NAME       timerfd_create, timerfd_settime, timerfd_gettime - timers that notify vi ...

  4. Android的微信智能心跳方案

    原文地址: 年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析.我和春哥抓包测试了差不多两个多礼拜 ...

  5. Windows下基于ADS+J-Link 的ARM开发环境搭建

    在一般ARM编程教学和实验环境里,一般采用 ADS加+并口转Jtag板+H-Jtag的开发环境.但是这种方法最大缺点是需要机器上有一个并口.现在无论PC还是笔记本都很难有并口,因此采用USB接口调试器 ...

  6. Java的Random总结

    /** * @Title:RandomNum.java * @Package:com.yhd.chart.model * @Description:Java产生随机数 * @author:Youhai ...

  7. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

  8. EFI、UEFI、MBR、GPT的区别

    UEFI.GPT.MBR是什么?这些专业术语不难理解,UEFI属于主板类名词,其作用类似于BIOS.GPT.MBR则属于硬盘类名词,它们的作用类似一艘航母的骨架,有了这个骨架,我们才可以进行细致到诸如 ...

  9. JDBC完成的三个基本工作

    JDBC完成的三个基本工作 1.与数据库建立连接 2.执行SQL语句 3.获得SQL语句的执行结果

  10. 利用Eclipse中的Maven构建Web项目报错(二)

    利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...