精华内容
下载资源
问答
  • ProtoBuf 通过 proto 文件生成 cc/h 文件的步骤如下: 先通过 protobuf 源文件编译出 protoc 可执行文件 1. git clone https://github.com/protocolbuffers/protobuf.git 2. cd protobuf/ 3. git checkout -b v...

    参考:protobuf

    ProtoBuf 通过 proto 文件生成 cc/h 文件的步骤如下( Linux 下):

    1. 先通过 protobuf 源文件编译出 protoc 可执行文件
    1. git clone https://github.com/protocolbuffers/protobuf.git
    2. cd protobuf/
    3. git checkout -b v2.6.1 origin/2.6.1-artifacts
    4. wget https://codeload.github.com/google/googletest/tar.gz/release-1.5.0
    5. tar -zxvf release-1.5.0
    6. mv googletest-release-1.5.0/ gtest
    7. ./autogen.sh
    8. ./configure
    9. make -j8
    10. sudo make install
    
    1. 然后通过 p生成 cc/h 文件:
    protoc --proto_path=. --cpp_out=. ./Test.proto
    

    如果 make install 失败,则直接使用全路径的 protoc 生成 cc/h 文件:

    cd protobuf
    ./src/protoc --proto_path=. --cpp_out=. ./Test.proto
    
    展开全文
  • 在项目中定义HHHA.proto文件,然后在HHHB.cc或者HHHC.h中直接使用.proto中的定义的“类”——这是可行的。方法是用bazel构建项目时先由HHHA.proto生成中间文件HHHA.pb.cc和HHHA.pb.h。 前提: 正确安装bazel,...

    在项目中定义HHHA.proto文件,然后在HHHB.cc或者HHHC.h中直接使用.proto中的定义的“类”——这是可行的。方法是用bazel构建项目时先由HHHA.proto生成中间文件HHHA.pb.cc和HHHA.pb.h。

     

    前提:

    •     正确安装bazel,如果没有,请参照这里.

     

    【步骤】

    目录结构

    ├── WORKSPACE
    └── src
        ├── BUILD
        └── addressbook.proto

    其中,src为包名,因为它包含了BUILD文件

    WORKSPACE:

    load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
    
    http_archive(
        name = "rules_proto",
        sha256 = "602e7161d9195e50246177e7c55b2f39950a9cf7366f74ed5f22fd45750cd208",
        strip_prefix = "rules_proto-97d8af4dc474595af3900dd85cb3a29ad28cc313",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
            "https://github.com/bazelbuild/rules_proto/archive/97d8af4dc474595af3900dd85cb3a29ad28cc313.tar.gz",
        ],
    )
    load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
    rules_proto_dependencies()
    rules_proto_toolchains()
    

    BUILD:

    load("@rules_proto//proto:defs.bzl", "proto_library")
    
    
    cc_library(
        name = "lib",
        deps = [":foo_cc_proto"],
    )
    
    cc_proto_library(
        name = "foo_cc_proto",
        deps = [":foo_proto"],
    )
    
    proto_library(
        name = "foo_proto",
    	srcs = ["addressbook.proto"],
    )

    addressbook.proto:

    syntax = "proto2";
    
    package tutorial;
    
    message Person {
      required string name = 1;
      required int32 id = 2;
      optional string email = 3;
    
      enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
      }
    
      message PhoneNumber {
        required string number = 1;
        optional PhoneType type = 2 [default = HOME];
      }
    
      repeated PhoneNumber phones = 4;
    }
    
    message AddressBook {
      repeated Person people = 1;
    }

    执行构建:

    bazel build src:foo_cc_proto

    查看目标文件:

     

    参考:https://docs.bazel.build/versions/master/be/c-cpp.html#cc_proto_library

     

    展开全文
  • ProtoBuffer由.proto文件生成.cc/.h   一:编译源码下载地址:http://code.google.com/p/protobuf/downloads/list 下载后,根据编译说明进行编译。windows 平台,直接打开msvc中的工程文件,直接编译。unix/Linux...

    ProtoBuffer由.proto文件生成.cc/.h

     

    一:编译源码
    下载地址:http://code.google.com/p/protobuf/downloads/list 
    下载后,根据编译说明进行编译。
    windows 平台,直接打开msvc中的工程文件,直接编译。
    unix/Linux平台,先进行configure,在make。

    [下载和编译过程不详述,请看这里]

    生成的结果中有库文件有:
    libprotobuf.lib

    libprotobuf-lite.lib

    libprotoc.lib

    可执行文件有:
    protoc.exe

    头文件:
    根据提供的extract_includes.bat文件,提取公共头文件。

    二:编写proto文件
    根据需要,编写proto文件。

    补充一条:如果想使用libprotobuf-lite.lib(会使二进制体积小一些),则在.proto文件的头部声明:

    option optimize_for = LITE_RUNTIME;

    三:生成头文件
    编写完proto文件后,接下来,用protoc.exe生成.h和.cc文件。
    命令如下:
    protoc.exe -proto_path=SRC --cpp_out=DST SRC/checklist.proto 
    其中--proto_path指出proto文件所在的目录,--cpp_out则是生成的代码文件要放的目录,最后的一个参数指出proto文件的路径。如上述命令中可以看出,将SRC目录下的addressbook.proto编译后放在DST目录下,应该会生成checklist.pb.h和checklist.pb.cc文件

     

    四:Notepad++挂接ProtoBuffer代码生成器protoc

    手动用proto文件生成.h/.cc文件比较麻烦,可以借用notepad++的插件一劳永逸

    在插件菜单NppExec(如果没有就先装这个插件)->Execute弹出的对话框中输入以下信息

    [cpp]  view plain  copy
     
     在CODE上查看代码片派生到我的代码片
    1. "protoc.exe" --cpp_out $(CURRENT_DIRECTORY) --proto_path $(CURRENT_DIRECTORY) $(FULL_CURRENT_PATH)   

    protoc.exe的路径可以自己指定本机的绝对路径

    编译出的文件将自动放置到proto文件所在目录

    五:与工程进行集成
    需要把生成的.h和.cc导入到工程中去,在需要用到数据解析的文件中,引用该.h文件。
    需要把libprotobuf.lib(或libprotobuf-lite.lib)添加到项目的依赖库中。

     

    补充一条:一般用vs编的时候,默认需要在.cpp/.cc文件头部加预编译头文件#include "stdafx.h",但这又会修改.cc文件(原则上生成的.h/.cc文件不要修改),所以解决的方法就是:在VS的solution explorer中右键checklist.pb.cc-->属性-->预编译头(precompiled header)->预编译头(precompiled header)-->选择“不使用预编译头”("not using precompiled headers")


    六:推荐做法:
    建立文件夹pbbuff,在其中创建3个子文件夹:bin,lib,include,其中:
    bin 存放proto.exe文件 
    lib 存放libprotobuf.lib 文件
    include 存放公共头文件
    创建环境变量PBROOT,指向pbbuff文件。把%PBROOT%/bin添加到系统的环境变量PATH中,以便能识别protoc命令。

     

     

    【参考:http://yleesun.blog.163.com/blog/static/294134022011112102117958/】

    展开全文
  • } 四、编译.proto文件生成读写接口 运行 protocol buffer 编译器 protoc,编译 .proto 文件生成所需语言的读写接口代码,这些代码可以操作文件中描述的 message 类型,包括获取和设置字段值、将 message 序列化为...

    一、简介

    protocol buffers 是一种灵活、高效、自动化机制的结构数据序列化方法——可类比 XML,但是比 XML 更小、更快、更为简单。你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏根据旧数据结构编译而成并且已部署的程序。

    二、安装:参考官网 https://github.com/protocolbuffers/protobuf/blob/master/src/README.md

    sudo apt-get install autoconf automake libtool curl make g++ unzip # 安装依赖项
    
    git clone https://github.com/protocolbuffers/protobuf.git
    cd protobuf
    git submodule update --init --recursive
    ./autogen.sh
    
    ./configure
    make
    make check
    sudo make install
    sudo ldconfig # refresh shared library cache.

    三、数据类型

    double: 浮点数

    float: 单精度浮点

    int32: int类型,使用可变长编码,编码负数不够高效,如果有负数那么使用sint32

    sint32: int类型,使用可变长编码, 有符号的整形,比通常的int32高效

    uint32: 无符号整数使用可变长编码方式

    int64: long long,使用可变长编码方式。编码负数时不够高效——如果有负数,可以使用sint64

    sint64: long long,使用可变长编码方式。有符号的整型值。编码时比通常的int64高效

    uint64: 无符号整数使用可变长编码方式

    fixed32: 总是4个字节。如果数值总是比总是比2^28大的话,这个类型会比uint32高效

    fixed64: 总是8个字节。如果数值总是比总是比2^56大的话,这个类型会比uint64高效

    sfixed32: 总是4个字节

    sfixed64: 总是8个字节

    bool: bool值

    string: 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本

    bytes: 可能包含任意顺序的字节数据。类似java的ByteString以及 c++ string

    三、proto文件格式

    创建 .proto 文件,定义数据结构

    message xxx {
      // 字段规则:required -> 字段只能也必须出现 1 次
      // 字段规则:optional -> 字段可出现 0 次或1次
      // 字段规则:repeated -> 字段可出现任意多次(包括 0)
      // 类型:int32、uint32、int64、uint64、bool、string、double、float ....
      // 字段编号:0 ~ 536870911(除去 19000 到 19999 之间的数字)
      字段规则 类型 名称 = 字段编号;
    }

    注意:

    • proto3 已舍弃 required 字段,optional 字段也无法显示使用(因为缺省默认就设置为 optional)。
    • 1 到 15 范围内的字段编号需要一个字节进行编码,应该为非常频繁出现的 message 元素保留字段编号 1 到 15 。
    • 为 .proto 文件添加注释,可以使用 C/C++ 语法风格的注释 // 和 /* ... */ 。

    如果要用作字段类型的 message 类型已在另一个 .proto 文件中定义,可以通过导入来使用其他 .proto 文件中的定义。要导入另一个 .proto 的定义,可以在文件顶部添加一个 import 语句:

    import "myproject/other_protos.proto";

    .proto文件新增一个可选的package声明符,用来防止不同的消息类型有命名冲突。包的声明符会根据使用语言的不同影响生成的代码。对于C++,产生的类会被包装在C++的命名空间中。

    package foo.bar; // package声明符,对于c++,生成的Open类位于命名空间foo::bar下
    message Open { ... }

    然后,你可以在定义 message 类型的字段时使用包说明符:

    message Foo {
      foo.bar.Open open = 1;
    }

    package 影响生成的代码的方式取决于你所选择的语言,在 C++ 中,生成的类包含在 C++ 命名空间中。例如,Open 将位于命名空间 foo::bar 中。 

     例:

    person.proto

    // person message
    syntax = "proto3";
    
    package alan.protobuf_test;
    
    message Person {
      string name = 1;
      int32 id = 2;
      string email = 3;
     
      enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
      }
     
      message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
      }
     
      repeated PhoneNumber phones = 4;
    }
    

    phonebook.proto

    /* phonebook message */
    syntax = "proto3";
    
    import "person.proto";
    
    package alan.protobuf_test;
    
    message PhoneBook {
        repeated Person persons = 1;
    }
    

    四、编译.proto文件生成读写接口

    运行 protocol buffer 编译器 protoc,编译 .proto 文件生成所需语言的读写接口代码,这些代码可以操作文件中描述的 message 类型,包括获取和设置字段值、将 message 序列化为输出流、以及从输入流中解析出 message。对于 C++,编译器从每个 .proto 生成一个 .h 和 .cc 文件,其中包含文件中描述的每种 message 类型对应的类。

    Protocol 编译器的调用如下:

    protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --python_out=DST_DIR path/to/file.proto

     IMPORT_PATH 指定在解析导入指令时查找 .proto 文件的目录,如果省略,则使用当前目录。可以通过多次传递 --proto_path 选项来指定多个导入目录,他们将按顺序搜索。-I = IMPORT_PATH 可以用作 --proto_path 的缩写形式。--cpp_out在 DST_DIR 中生成 C++ 代码。

    例:

    编译上面.proto文件

    protoc -I=proto/ --cpp_out=proto/ person.proto phonebook.proto

    生成:

    proto

      |__person.pb.cc

      |__person.pb.h

      |__person.proto

      |__phonebook.pb.cc

      |__phonebook.pb.h

      |__phonebook.proto

    五、使用生成的接口

    对结构数据(如json)进行序列化、反序列化以及读写。

    protobuf_test.cc:

    // #include <fcntl.h>
    // #include "google/protobuf/text_format.h"
    // #include <google/protobuf/io/zero_copy_stream_impl.h>
    #include <sstream>
    #include <fstream>
    #include "google/protobuf/util/json_util.h"
    #include "person.pb.h" // 对应的proto文件的路径
    #include "phonebook.pb.h"
    
    using Person = alan::protobuf_test::Person;
    using PhoneBook = alan::protobuf_test::PhoneBook;
    
    int main() {
        // Verify that the version of the library that we linked against is
        // compatible with the version of the headers we compiled against.
        GOOGLE_PROTOBUF_VERIFY_VERSION;
    
        std::string file_path = "/home/alan/alan_projects/protobuf_test/phonebook.json";
        // std::string file_path = "/home/alan/alan_projects/protobuf_test/phonebook.txt";
        // write to json file
        {
            PhoneBook phonebook;
    
            Person* person1 = phonebook.add_persons();
            person1->set_name("alan");
            person1->set_id(1);
            person1->set_email("alan@example.com");
            Person::PhoneNumber* phonenumber1 = person1->add_phones();
            phonenumber1->set_number("10010");
            phonenumber1->set_type(Person::PhoneType::Person_PhoneType_HOME);
            Person::PhoneNumber* phonenumber2 = person1->add_phones();
            phonenumber2->set_number("10086");
            phonenumber2->set_type(Person::PhoneType::Person_PhoneType_WORK);
    
            Person* person2 = phonebook.add_persons();
            person2->set_name("ayun");
            person2->set_id(2);
            person2->set_email("ayun@example.com");
            Person::PhoneNumber* phonenumber3 = person2->add_phones();
            phonenumber3->set_number("10000");
            phonenumber3->set_type(Person::PhoneType::Person_PhoneType_HOME);
            Person::PhoneNumber* phonenumber4 = person2->add_phones();
            phonenumber4->set_number("10086");
            phonenumber4->set_type(Person::PhoneType::Person_PhoneType_WORK);
    
            std::string json_string;
            google::protobuf::util::JsonPrintOptions options; 
            options.add_whitespace = true; 
            options.always_print_primitive_fields = true; 
            options.preserve_proto_field_names = true; 
            auto ret = google::protobuf::util::MessageToJsonString(phonebook, &json_string, options);
            // std::cout << json_string << std::endl;
    
            // std::string txt_string;
            // google::protobuf::TextFormat::PrintToString(phonebook, &txt_string);
    
            std::ofstream fout;
            fout.open(file_path.c_str(), std::ios::ate);
            fout << json_string;
            // fout << txt_string;
            fout.close();
        }
        // read from json file
        {
            std::ifstream fin(file_path.c_str());
            if (!fin) {
                std::cout << "Fail to read json file" << file_path;
                return -1;
            }
            std::stringstream buffer;
            buffer << fin.rdbuf();
            PhoneBook phonebook;
            google::protobuf::util::JsonParseOptions options;
            options.ignore_unknown_fields = false;  // proto 和 json 的域必须对应
            auto status = google::protobuf::util::JsonStringToMessage(buffer.str(),
                                                                &phonebook, options);
            if (!status.ok()) {
                std::cout << "Fail to parse json file [" << file_path << "]: ["
                          << status.error_message() << "]";
            }
    
            // PhoneBook phonebook;
            // int file_descriptor = open(file_path.c_str(), O_RDONLY);
            // if (file_descriptor < 0) {
            //   return -1;
            // }
            // google::protobuf::io::FileInputStream file_input_stream(file_descriptor);
            // file_input_stream.SetCloseOnDelete(true);
            // if (!google::protobuf::TextFormat::Parse(&file_input_stream, &phonebook) &&
            //     !phonebook.ParseFromZeroCopyStream(&file_input_stream)){
            //   return -1;
            // }
    
            for (const auto& person : phonebook.persons()) {
                std::cout << "name: " << person.name();
                for (const auto& phone : person.phones()) {
                    if (phone.type() == Person::PhoneType::Person_PhoneType_HOME) {
                        std::cout << " --> home number: " << phone.number() << std::endl;
                    }
                }
            }
            fin.close();
        }
        // Optional:  Delete all global objects allocated by libprotobuf.
        google::protobuf::ShutdownProtobufLibrary();
        return 0;
    }
    

    CMakeLists.txt:

    cmake_minimum_required(VERSION 2.8)
    project(protobuf_test)
    
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    
    find_package(Protobuf REQUIRED)
    include_directories(${PROTOBUF_INCLUDE_DIRS})
    include_directories(${CMAKE_CURRENT_BINARY_DIR})
    protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS proto/person.proto proto/phonebook.proto)
    
    add_executable(protobuf_test protobuf_test.cc ${PROTO_SRCS} ${PROTO_HDRS})
    target_link_libraries(protobuf_test ${PROTOBUF_LIBRARIES})
    

    输出的phonebook.json文件:

    {
     "persons": [
      {
       "name": "alan",
       "id": 1,
       "email": "alan@example.com",
       "phones": [
        {
         "number": "10010",
         "type": "HOME"
        },
        {
         "number": "10086",
         "type": "WORK"
        }
       ]
      },
      {
       "name": "ayun",
       "id": 2,
       "email": "ayun@example.com",
       "phones": [
        {
         "number": "10000",
         "type": "HOME"
        },
        {
         "number": "10086",
         "type": "WORK"
        }
       ]
      }
     ]
    }
    

    输出的phonebook.txt文件:

    persons {
      name: "alan"
      id: 1
      email: "alan@example.com"
      phones {
        number: "10010"
        type: HOME
      }
      phones {
        number: "10086"
        type: WORK
      }
    }
    persons {
      name: "ayun"
      id: 2
      email: "ayun@example.com"
      phones {
        number: "10000"
        type: HOME
      }
      phones {
        number: "10086"
        type: WORK
      }
    }
    

    六、生成 JsonLines 文件

    std::string json_string;
    google::protobuf::util::JsonPrintOptions options; 
    options.add_whitespace = false; // 改这里
    options.always_print_primitive_fields = true; 
    options.preserve_proto_field_names = true; 
    google::protobuf::util::MessageToJsonString(phonebook, &json_string, options); 
    
    std::ofstream fout(test.txt);
    fout.exceptions(std::ifstream::failbit | std::ifstream::badbit);
    fout << json_string;
    fout.close();

    七、Json 和 JsonLines 文件相互转换

    sudo apt-get install jq
    cat test.txt | jq '.' > test.json # jsonlines->json
    cat test.json | jq -c '.' > test.txt # json->jsonlines

    参考:

    https://developers.google.com/protocol-buffers/docs/overview


    std::fstream fout("/tmp/binary_file", std::ios::out | std::ios::trunc | std::ios::binary);
    phonebook.SerializeToOstream(&fout));
    
    protoc --decode alan.protobuf_test.Persons proto/PhoneBook.proto < /tmp/binary_file > /tmp/test.json

    protobuf Message的序列化和反序列化string类型(SerializeToString,ParseFromString)

    std::stringstream ss;

    PhoneBook phonebook;

    CHECK(phonebook.ParseFromString(ss));

    std::fstream fout("/tmp/test.proto", std::ios::out | std::ios::trunc | std::ios::binary);

    CHECK(phonebook.SerializeToOstream(&fout));

     

    std::ostringstream output

    proto.SerializeToOstream(&output));

     

    PhoneBook phonebook;

    phonebook.clear_persons(); ??

    Person person;

    *phonebook.add_persons() = person;

    // phonebook.add_persons(person) ??

     

    protobuf mutable_* 函数

    从该函数的实现上来看,该函数返回指向该字段的一个指针。同时将该字段置为被设置状态。

    若该对象存在,则直接返回该对象,若不存在则新new 一个。

    message Cover {

        string title = 1;

        int32 page = 2;

    }

    message PhoneBook {
        repeated Person persons = 1;

        Cover cover = 2;
    }

    PhoneBook phonebook;

    phonebook.mutable_cover()->set_page(0)

    展开全文
  • xcopy /Y /Q *.exe %WORK_DIR%\bin pause proto文件生成c# c++代码 @echo off & color 0A set CURRENT_DIR=%cd% set PROTO_TOOLS_PATH=%CURRENT_DIR%\Tools set PROTO_FILES_PATH=%CURRENT_DIR%\ProtoFiles echo %...
  • 答案是肯定的,只是想从proto-c生成的源文件恢复.proto描述文件,目前还没有自动化的工具,必须人去识别并恢复.proto文件 我们知道,.proto文件里面由enum枚举类型和message消息体组成,message里面可以嵌套enum...
  • Linux下利用protoc命令生成protobuf的头文件和源文件,根据mesType.proto文件 protobuf的message文件为 msgType.proto 生成c++头文件和源文件的方式 protoc --cpp_out=./ ./msgType.proto protoc 命令详解 protoc ...
  • 如何用proto生成文件

    千次阅读 2017-08-17 11:37:56
    一:编译源码 ...下载后,根据编译说明进行编译。 windows 平台,直接打开msvc中的工程文件,直接编译。 unix/Linux平台,先进行configure,在make。 [下载和编译过程不详述...生成的结果中有库文件有: libprotobuf.lib
  • cmd打开windows下命令行,将proto.exe和运行时所使用的dll与caffe.proto放置在同一文件夹下 命令行打开至该文件夹下 则输入命令: protoc caffe.proto --cpp_out=./ 运行完毕,文件生成
  • 工程1.1,消息结构体--- addressbook.proto1.2,文本格式prototxt 文件 --- txt.prototxt1.3,操作接口定义 --- protobuf.h1.4,操作接口实现及测试代码 --- protobuf.cpp1.5,Makefile2,编译测试2.1,生成访问类...
  • 生成文件在[ProtocolBuffer]定义ProtocolBuffer消息中的Person.proto文件用命令protoc.exe --cpp_out=./ Person.proto生成的Person.pb.h和Person.pb.cc;Person.pb.h其关键部分代码如下:namespace tutorial { // ...
  • 工作中,对于简单有序但是频率出现较高的问题,做一个工具对其进行所谓的批处理是能够提升很高的工作效率的,下面是对协议文件生成 与 处理。 这里我是用了python做了一个脚本,生成可使用的程序使用文件 以及 对...
  • Go语言grpc proto生成pb文件

    千次阅读 2020-05-02 22:50:02
    h Usage: protoc [OPTION] PROTO_FILES Parse PROTO_FILES and generate output based on the options given: -IPATH, --proto_path=PATH Specify the directory in which to search for imports. May be specified ...
  • 1. PROTO文件的解析 1.1 下载Google项目 a. Protobuf-cpp-3.9.1.zip 网址:https://github.com/protocolbuffers/protobuf/releaseb. Cmake-3.15.2-win32-x86.msi 网址:https://cmake.org/download/ 以上两...
  • 文章目录1,工程1.1,定义消息结构体proto文件 --- addressbook.proto1.2,文本格式prototxt 文件 --- txt.prototxt1.3,protobuf操作接口1.3.1,定义 --- protobuf.h1.3.2,操作接口实现及测试代码 --- protobuf_...
  • yaml-cpp/yaml.h> #include <iostream> #include <assert.h> int main() { YAML::Node node; assert(node.IsNull()); //初始化的节点是Null类型 node["key"] = "value"; //当你给它赋值键值对,...
  • echo protoc.exe + --proto_path或者-I=(proto文件所在绝对路径,不包括proto文件本身) + --cpp_out=(.cc .h文件输出目录) + (proto文件所在绝对路径,包括proto文件名)。 echo protoc.exe --proto_path=...
  • proto的编译主要有以下两条命令: protoc -I ./ --cpp_out=.... --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` 目标proto文件路径 分别对应生成*.pb.h、*.pb.cc 和*.grpc.pb.h 、*.grpc.pb.cc .pro &am...
  • Caffe源码中caffe.proto文件分析

    千次阅读 2017-02-16 18:19:41
    Caffe源码中caffe.proto文件分析
  • 切换到cartographer-master目录下,生成pb.cc和pb.h文件 protoc -I=/home/peak/Downloads/cartographer-master/ --cpp_out=/home/peak/cartographer_grpc /home/peak/Downloads/cartographer-master/cartographer/...
  • proto文件编译

    2021-03-24 15:48:33
    配置protoc环境变量 proto文件生成.cc和.h 低版本: protoc.exe --proto_path=SRC --cpp_out=DST proto_file SRC指出”.proto”文件所在的目录,DST是生成的”.cc”和”.h”文件存放的目录, proto_file是”.proto...
  • 1. 编写proto文件首先需要一个proto文件,其中定义了我们程序中需要处理的结构化数据:// Filename: addressbook.proto syntax="proto2"; package addressbook; import "src/help.proto"...
  • caffe proto文件,和配置文件

    千次阅读 2016-09-01 19:23:49
    它位于…\src\caffe\proto目录下,在这个文件夹下还有一个.pb.cc和一个.pb.h文件,这两个文件都是由caffe.proto编译而来的。  在caffe.proto中定义了很多结构化数据,包括: BlobProtoBlobShape ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,335
精华内容 2,134
关键字:

cppproto文件生成h