• protobuf安装教程


    下载 protobuf 、cmake

    https://github.com/google/protobuf/releases
    protobuf如:protobuf-cpp-3.10.1.zip
    并解压到D盘,得到protobuf-3.1.0文件夹
    https://cmake.org/download/
    cmake如:cmake-3.9.1-win64-x64.msi
    双击安装

    编译

    打开cmake
    1.D:protobuf-3.1.0cmake
    2.D:protobuf-3.1.0-build

    点configure
    再点configure
    然后点击Generate,
    如果成功,Open Project会亮,点击Open Project进入编译好的目录
    生成解决方案

    新建工程

    新建一个vs工程,如在D盘新建ProtoTest空工程,同时在源文件下新建main.cpp
    在VS工程下,即D:ProtoTest下新建temp文件夹,将D:protobuf-3.1.0-buildDebug下的libprotobufd.libproto.exe拷贝到temp文件夹中。
    在temp文件夹下新建person.proto文件,添加以下内容:

    package tutorial;
    
    message Person {
      required int32 id = 1;
      required string name = 2;
      optional string email = 3;
    }
    

    tutorial是包名(也可以说是命名空间),没有第一行的话,就是没有命令空间的。
    再添加一个批处理文件build.bat,内容为:

    protoc --cpp_out=./ person.proto
    

    双击批处理文件build.bat,会在当前目录下生成:person.pb.h和person.pb.cc文件,
    person.pb.hperson.pb.cc文件拷贝到D:ProtoTestProtoTest下,
    在源文件和头文件下右击将person.pb.hperson.pb.cc手动添加进来。
    将D:protobuf-3.1.0下src下的google文件夹拷贝到D:ProtoTest

    配置VS

    在VS解决方案下的ProtoTest右击-属性
    C/C++-常规-附加包含目录-D:ProtoTest
    C/C++-预处理器-_SCL_SECURE_NO_WARNINGS
    C/C++-代码生成-运行库-多线程调试(/MTd)
    链接器-常规-附加库目录-D:ProtoTest emp
    链接器-输入-附加依赖项-libprotobufd.lib

    如果提示找不到头文件,可能是平台选错了。Win32和X64自查一下

    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;
    }
    

    F5运行一下。

    参考链接:
    https://blog.csdn.net/program_anywhere/article/details/77365876
    https://blog.csdn.net/hp_cpp/article/details/81561310

  • 相关阅读:
    grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
    php中htmlspecialchars,htmlentities用法
    php get_magic_quotes_gpc()函数用法介绍
    .animate()
    想用PHP做抽奖系统,思路..
    “评论盖楼”的设计思路
    JavaScript有关的10个怪癖和秘密
    Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
    项目描述 Project Description
    instance initializer
  • 原文地址:https://www.cnblogs.com/chendeqiang/p/12861521.html
Copyright © 2020-2023  润新知