protobuf的编译和使用,在windows平台上 - Go语言中文社区

protobuf的编译和使用,在windows平台上


0 准备工作:

(1)下载protobuf
https://github.com/google/protobuf/releases
这里写图片描述
下载的是cpp版本,选择当前最新版本即可
(2)安装cmake
https://cmake.org/download/
这里写图片描述
根据系统选择安装的cmake版本,我这里选择的是64位版本安装。

1 编译protocol

解压刚才下载的protobuf包,打开cmake
这里写图片描述
按图所示,1选择protobuf中的cmake目录,2是选择目标目录(生成的工程存放位置),3的点击左下角的configure按钮:
这里写图片描述
以vs2015工程为例,上面的一个框是32位版本,下面的Win64是64位版本。以生成32位版本为例,生成64位版本工程操作相同。
这里写图片描述
点击finish
这里写图片描述
没有错误,generate按钮变为可用,默认的选项如图,这里就默认生成静态包。
点击generate按钮后,几秒后,Open Project按钮变为可用,打开工程
这里写图片描述
这里可以选择生成Debug版本32位的lib,只生成libprotobuf和protoc即可。
这里写图片描述
这3个是我们需要的。

3 测试生成的lib库和protoc.exe工具

(1)新建一个person.proto的文本文件

package tutorial;

message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

tutorial是包名(也可以说是命名空间),没有第一行的话,就是没有命令空间的。
将protoc.exe和person.proto放在同一个文件夹下,再添加一个批处理文件build.bat,内容为:

protoc --cpp_out=./ person.proto
  • 1

双击批处理文件build.bat,会在当前目录下生成:person.pb.h和person.pb.cc文件,将其添加到下面的vs工程中。
(2)建立一个win32控制台程序的工程
把protobuf-3.6.1srcgoogleprotobuf这个目录中的头文件(其余的文件可以删除,也可以保留,不影响),都拷贝过来,放在当前工程下,建立一个include文件夹,把这些.h头文件放进去(文件夹名自己定)。
生成的libprotobufd.lib也拷贝过来,放在当前目录下的lib文件夹(自己新建的文件夹)中。
设置工程:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
main.cpp代码:

#include <iostream>
#include <fstream>
#include <string>
#include "person.pb.h"

using namespace std;

int main(int argc, char* argv[])
{
    GOOGLE_PROTOBUF_VERIFY_VERSION;

    tutorial::Person person;

    //将数据写到person.pb文件
    person.set_id(123456);
    person.set_name("Mark");
    person.set_email("mark@example.com");

    fstream out("person.pb", ios::out | ios::binary | ios::trunc);
    person.SerializeToOstream(&out);
    out.close();


    //从person.pb文件读取数据
    fstream in("person.pb", ios::in | ios::binary);
    if (!person.ParseFromIstream(&in)) {
        cerr << "Failed to parse person.pb." << endl;
        exit(1);
    }

    cout << "ID: " << person.id() << endl;
    cout << "name: " << person.name() << endl;
    if (person.has_email()) {
        cout << "e-mail: " << person.email() << endl;
    }

    getchar();
    return 0;
}

这两个生成的文件要记得添加到工程中
这里写图片描述
编译过程:

1>------ 已启动全部重新生成: 项目: pbDemo, 配置: Debug Win32 ------
1>  person.pb.cc
1>  main.cpp
1>  正在生成代码...
1>  pbDemo.vcxproj -> D:VS2015_ProjectpbDemoDebugpbDemo.exe
1>  pbDemo.vcxproj -> D:VS2015_ProjectpbDemoDebugpbDemo.pdb (Full PDB)
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

运行结果:
这里写图片描述

--------------------- 作者:hp_cpp 来源:CSDN 原文:https://blog.csdn.net/hp_cpp/article/details/81561310?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dai_jing/article/details/83010324
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢