• protobuf的下载、编译和使用


    一 背景

      工作中临时需要使用 protobuf v3.0.2 做消息格式转换,折腾了很久才搞定,这里特意做一个记录。

    二 准备工作

      全程使用的电脑为公司的win7 64位旗舰版,已经预先安装VS2013和cmake3.10.2,需要注意的是,如果cmake版本过低,编译时会提示失败,需要更新的cmake版本,重新执行操作。

      下载protobuf源代码,公司内网可以访问github,因此选择从github直接下载ZIP包:v3.0.2.zip,这里解压到 “D:DocumentsProgramTools”。

     

    三 编译

      这里以编译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:DocumentsProgramToolsprotobuf-3.0.2cmake

      (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.2installx86debug 目录下生成 bin、include、lib、cmake 四个文件夹。

      

      bin文件夹中的 protoc.exe 程序可以直接拿来转换.proto文件,此处不做介绍。

      

    四 lib库的使用

      为了能够动态地创建message对象,修改message参数,需要调用上面编译出的lib库文件,利用protobuf中的反射机制实现。

      新建C++工程,工程右键,选择属性,配置头文件和lib库文件,注意第2点:

      (1)“C/C++ - 常规 - 附加包含目录”,新增 “D:DocumentsProgramToolsprotobuf-3.0.2installx86debuginclude”;

      (2)”C/C++ - 代码生成 - 运行库”,选择 “多线程调试(/MTd)”,与protobuf保持一致,否则编译不过;

      (3)“链接器 - 常规 - 附加库目录”,新增 ”D:DocumentsProgramToolsprotobuf-3.0.2installx86debuglib”;

      (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.0srcgoogleprotobuf” 文件夹下将这两个头文件copy到 “protobuf-3.3.0installx86debugincludegoogleprotobuf” 中,编译通过(同样需要按第四步进行配置),这应该是版本自身的Bug。

      参考博客:https://www.cnblogs.com/tongy0/p/7119778.html

  • 相关阅读:
    谷歌浏览器禁用缓存
    web项目中各种路径的获取
    visual studio 2015常用快捷键
    Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值
    JQuery获取浏览器窗口的可视区域高度和宽度,滚动条高度
    OAuth学习总结
    今日技术碎片
    碎片化的一天
    软件架构简史
    竞态条件概念
  • 原文地址:https://www.cnblogs.com/rmthy/p/8462639.html
Copyright © 2020-2023  润新知