protoc_protocol - CSDN
精华内容
参与话题
  • protoc使用手册

    千次阅读 2017-12-04 18:41:32
    源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载... 下载后的解压缩包含的内容如下(以mac下为例) 我们通过 which 命令可以查到 prot

    源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://github.com/google/protobuf/releases ,注意不是带语言后缀的文件,那是源码,如下图:

    image

    下载后的解压缩包含的内容如下(以mac下为例)

    image

    我们通过 which 命令可以查到 protoc 的安装目录, 覆盖它即可。

    $ which protoc
    /usr/local/bin/protoc

    This package contains a precompiled Win32 binary version of the protocol buffer
    compiler (protoc).  This binary is intended for Windows users who want to
    use Protocol Buffers in Java or Python but do not want to compile protoc
    themselves.  To install, simply place this binary somewhere in your PATH.

    This binary was built using MinGW, but the output is the same regardless of
    the C++ compiler used.

    You will still need to download the source code package in order to obtain the
    Java or Python runtime libraries.  Get it from:
      https://github.com/google/protobuf/releases/

    命令参数

     

    $ protoc -help
    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 multiple times;
                                  directories will be searched in order.  If not
                                  given, the current working directory is used.
      --version                   Show version info and exit.
      -h, --help                  Show this text and exit.
      --encode=MESSAGE_TYPE       Read a text-format message of the given type
                                  from standard input and write it in binary
                                  to standard output.  The message type must
                                  be defined in PROTO_FILES or their imports.
      --decode=MESSAGE_TYPE       Read a binary message of the given type from
                                  standard input and write it in text format
                                  to standard output.  The message type must
                                  be defined in PROTO_FILES or their imports.
      --decode_raw                Read an arbitrary protocol message from
                                  standard input and write the raw tag/value
                                  pairs in text format to standard output.  No
                                  PROTO_FILES should be given when using this
                                  flag.
      -oFILE,                     Writes a FileDescriptorSet (a protocol buffer,
        --descriptor_set_out=FILE defined in descriptor.proto) containing all of
                                  the input files to FILE.
      --include_imports           When using --descriptor_set_out, also include
                                  all dependencies of the input files in the
                                  set, so that the set is self-contained.
      --include_source_info       When using --descriptor_set_out, do not strip
                                  SourceCodeInfo from the FileDescriptorProto.
                                  This results in vastly larger descriptors that
                                  include information about the original
                                  location of each decl in the source file as
                                  well as surrounding comments.
      --dependency_out=FILE       Write a dependency output file in the format
                                  expected by make. This writes the transitive
                                  set of input file paths to FILE
      --error_format=FORMAT       Set the format in which to print errors.
                                  FORMAT may be 'gcc' (the default) or 'msvs'
                                  (Microsoft Visual Studio format).
      --print_free_field_numbers  Print the free field numbers of the messages
                                  defined in the given proto files. Groups share
                                  the same field number space with the parent
                                  message. Extension ranges are counted as
                                  occupied fields numbers.

      --plugin=EXECUTABLE         Specifies a plugin executable to use.
                                  Normally, protoc searches the PATH for
                                  plugins, but you may specify additional
                                  executables not in the path using this flag.
                                  Additionally, EXECUTABLE may be of the form
                                  NAME=PATH, in which case the given plugin name
                                  is mapped to the given executable even if
                                  the executable's own name differs.
      --cpp_out=OUT_DIR           Generate C++ header and source.
      --csharp_out=OUT_DIR        Generate C# source file.
      --java_out=OUT_DIR          Generate Java source file.
      --javanano_out=OUT_DIR      Generate Java Nano source file.
      --js_out=OUT_DIR            Generate JavaScript source.
      --objc_out=OUT_DIR          Generate Objective C header and source.
      --python_out=OUT_DIR        Generate Python source file.
      --ruby_out=OUT_DIR          Generate Ruby source file.

     

    例子

    Java 文件生成

    $ protoc --java_out=./java/ ./proto/helloworld.proto

    protoc 的命令格式为 protoc [OPTION] PROTO_FILES   (最后是待编译的 proto文件)

    --java_out 为输出java代码的目录,这里指定的是 ./java/ 目录。

    随后我们指定了proto文件的位置 ./proto/helloworld.proto 。

    执行上述命令,我们就 ./java/ 目录下就产生了对应的 java文件。

     

    go 文件生成

    下面这几种方式生成都可以:

    $ protoc --go_out=./go/ ./proto/helloworld.proto

    跟上面Java的生成完全一样,只不过这次是让生成 go 的代码。

    $ protoc --go_out=./go/ -I proto ./proto/helloworld.proto

    这次多了一个参数 -I , -I=IMPORT_PATH  can be used as a short form of --proto_path.

    -IPATH, --proto_path=PATH   Specify the directory in which to search for imports.  May be specified multiple times; directories will be searched in order.  If not given, the current working directory is used.

    IMPORT_PATH specifies a directory in which to look for .proto files when resolving import directives. If omitted, the current directory is used. Multiple import directories can be specified by passing the --proto_path option multiple times; they will be searched in order.

    简单来说,就是如果多个proto文件之间有互相依赖,生成某个proto文件时,需要import其他几个proto文件,这时候就要用-I来指定搜索目录。

    如果没有指定 –I 参数,则在当前目录进行搜索。

    上面两种方法产生的目录如下图, –I 参数起作用了后,生成目录少了一级:

    image

    javanano 文件生成

    $ protoc --javanano_out=ignore_services=true:./javanano/ -I proto ./proto/garlic.proto

    由于 javanano 是给 android 用的,没有服务器端代码,所以多了--javanano_out=ignore_services=true:DST_DIR 这个设置,其他完全一样。

    参考: https://github.com/grpc/grpc-common/issues/156

     

    更复杂的可以参考:

    Android protobuf nano documentation
    http://stackoverflow.com/questions/22247951/android-protobuf-nano-documentation

    https://developers.google.com/protocol-buffers/docs/proto3#generating

     

    为了更方便的使用gRPC,包括protoc的命令,针对不同语言有下面额外的方法:

    http://www.grpc.io/posts/installation

    Language    Platform    Command
    Node.js Linux, Mac, Windows    npm install grpc
    Python Linux, Mac, Windows    pip install grpcio
    Ruby Linux, Mac, Windows    gem install grpc
    PHP Linux, Mac, Windows    pecl install grpc-beta
    Go Linux, Mac, Windows    go get google.golang.org/grpc
    Objective-C Mac Runtime source fetched automatically from Github by Cocoapods
    C# Windows Install gRPC NuGet package from your IDE (Visual Studio, Monodevelop, Xamarin Studio)
    Java Linux, Mac, Windows    Use our Maven and Gradle plugins that provide gRPC with statically linked boringssl
    C++ Linux, Mac, Windows    Currently requires manual build and install

     

     

     

    参考资料:

    https://github.com/google/protobuf/tree/master/javanano

    https://github.com/google/protobuf

    展开全文
  • windows下安装protoc

    万次阅读 2018-04-11 15:08:05
    1,去这里https://github.com/google/protobuf/releases下载对应的protoc,我这里下的是protoc-3.5.1-win32.zip2,下好之后解压就行,然后把bin里面的protoc.exe加入到环境变量,可以参考...\Windows...

    1,去这里https://github.com/google/protobuf/releases

    下载对应的protoc,我这里下的是protoc-3.5.1-win32.zip

    2,下好之后解压就行,然后把bin里面的protoc.exe加入到环境变量,可以参考

    https://www.cnblogs.com/mar-q/p/7459845.html

    并且把protoc.exe拷贝到C:\Windows\System32

    3,可以了,


    展开全文
  • protoc命令

    2020-07-07 11:57:36
    仅作个人备份,浏览请看原文 ...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 s...

    转自:https://www.cnblogs.com/ghj1976/p/5435565.html

    仅作个人备份,浏览请看原文

     

    命令参数

    $ protoc -help
    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 multiple times;
                                  directories will be searched in order.  If not
                                  given, the current working directory is used.
      --version                   Show version info and exit.
      -h, --help                  Show this text and exit.
      --encode=MESSAGE_TYPE       Read a text-format message of the given type
                                  from standard input and write it in binary
                                  to standard output.  The message type must
                                  be defined in PROTO_FILES or their imports.
      --decode=MESSAGE_TYPE       Read a binary message of the given type from
                                  standard input and write it in text format
                                  to standard output.  The message type must
                                  be defined in PROTO_FILES or their imports.
      --decode_raw                Read an arbitrary protocol message from
                                  standard input and write the raw tag/value
                                  pairs in text format to standard output.  No
                                  PROTO_FILES should be given when using this
                                  flag.
      -oFILE,                     Writes a FileDescriptorSet (a protocol buffer,
        --descriptor_set_out=FILE defined in descriptor.proto) containing all of
                                  the input files to FILE.
      --include_imports           When using --descriptor_set_out, also include
                                  all dependencies of the input files in the
                                  set, so that the set is self-contained.
      --include_source_info       When using --descriptor_set_out, do not strip
                                  SourceCodeInfo from the FileDescriptorProto.
                                  This results in vastly larger descriptors that
                                  include information about the original
                                  location of each decl in the source file as
                                  well as surrounding comments.
      --dependency_out=FILE       Write a dependency output file in the format
                                  expected by make. This writes the transitive
                                  set of input file paths to FILE
      --error_format=FORMAT       Set the format in which to print errors.
                                  FORMAT may be 'gcc' (the default) or 'msvs'
                                  (Microsoft Visual Studio format).
      --print_free_field_numbers  Print the free field numbers of the messages
                                  defined in the given proto files. Groups share
                                  the same field number space with the parent
                                  message. Extension ranges are counted as
                                  occupied fields numbers.

      --plugin=EXECUTABLE         Specifies a plugin executable to use.
                                  Normally, protoc searches the PATH for
                                  plugins, but you may specify additional
                                  executables not in the path using this flag.
                                  Additionally, EXECUTABLE may be of the form
                                  NAME=PATH, in which case the given plugin name
                                  is mapped to the given executable even if
                                  the executable's own name differs.
      --cpp_out=OUT_DIR           Generate C++ header and source.
      --csharp_out=OUT_DIR        Generate C# source file.
      --java_out=OUT_DIR          Generate Java source file.
      --javanano_out=OUT_DIR      Generate Java Nano source file.
      --js_out=OUT_DIR            Generate JavaScript source.
      --objc_out=OUT_DIR          Generate Objective C header and source.
      --python_out=OUT_DIR        Generate Python source file.
      --ruby_out=OUT_DIR          Generate Ruby source file.

     

    protoc --plugin=grpc --go_out=plugins=grpc:./internal/infra/third_party/protobuf/pbapi/ -I ./api/ ./api/sms_pb.proto
    如果不指定使用grpc插件翻译proto里的service:protoc --go_out=./internal/infra/third_party/protobuf/pbapi/ -I ./api/ ./api/internal_header.proto
        -IPATH == --proto_path == -I,指定import的proto文件所在的目录,缺省
        --go_out,指定生成的pb.go的目录
        ./api/internal_header.proto,proto文件所在的位置

    展开全文
  • protoc 参数解释

    千次阅读 2017-05-03 11:29:14
    protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR path/file.proto  protoc.exe是编译器的名字;--proto_path指定对导入文件的搜索路径,若不指定,则为当前路径;--...

    protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR  path/file.proto
     protoc.exe是编译器的名字;--proto_path指定对导入文件的搜索路径,若不指定,则为当前路径;--cpp_out指定生成c++文件的路径,--java_out和 --python_out分别是生成java和python代码的路径;path/file.proto是定义结构的.proto文件。

    使用c++语言,会生成针对每个message类型的一个类,对每一个类也提供了相应的处理方法,还提供了序列化到输出流和从输入流中解析的方法。

    展开全文
  • protoc直接用版本

    2020-07-28 23:32:31
    在文件相同目录下,运行 cmd ,使用命令 :D:\>protoc -I=D:\ --cpp_out=D:\ D:\\Info.proto 生成
  • protoc安装

    千次阅读 2019-03-04 14:34:55
    下载地址:protoc的github地址 1.系统win10,下载了protobuf-2.5.0.tar.gz、protoc-2.5.0-win32.zip两个包,分别解压。 2.将protoc-2.5.0-win32中的protoc.exe拷贝到c:\windows\system32中; 3.将protoc.exe文件...
  • protoc执行命令

    千次阅读 2018-04-27 12:00:45
    protoc.exe news.proto --java_out=../src/main/java/ 
  • protoc 生成C++代码

    千次阅读 2017-10-11 11:16:20
    protoc 生成c++代码
  • Ubuntu下protoc升级

    万次阅读 2017-09-10 15:59:22
    reference: ...系统当前的protoc是2.5,想升级为3.4(在终端输入:protoc --version可以查看版本) 步骤: 1.下载protoc并解压: https://github.com/google/protobuf/releases 2.cd到的protoc的目录下
  • protocprotoc-gen-go产生的代码的区别

    万次阅读 2018-09-15 22:22:26
    protoc 命令来自于 https://github.com/google/protobuf,可以产生序列化和反序列化的代码,无go相关代码。  protoc-gen-go插件则来自于https://github.com/golang/protobuf/protoc-gen-go, 可以产生go相关代码...
  • [linux]protoc的安装

    千次阅读 2019-05-08 10:07:32
    下载protoc 再GitHub上下载对应版本: https://github.com/google/protobuf/releases tar -zxvf protobuf cd protobuf ./configure --prefix=/usr/local/protobuf make make check make install 配置环境变量 ...
  • 错误:/bin/sh: 1: protoc: not found

    万次阅读 2016-06-27 15:58:23
    错误:/bin/sh: 1: protoc: not found
  • protoc.exe如何使用

    千次阅读 2019-07-09 23:04:56
    直接上命令:(datagram.proto 文件和protoc.exe同一目录下,如果不同-I=后面为相应的路径) #c++的命令 protoc.exe -I=. --cpp_out=./ datagram.proto #java的命令 protoc.exe -I=. --java_out=./ datagram....
  • Windows 环境下的 protoc 安装

    万次阅读 2017-06-03 23:50:55
    下载需要的安装包:...protoc-3.1.0-win32.zip protobuf-java-3.1.0.zip 将protoc-3.1.0-win32中的protoc.exe拷贝到c:\windows\system32中 将proto.exe文件拷贝到解压后的protobuf-3.1.0\src目录中 pro
  • protocprotoc-gen-go安装

    万次阅读 2019-06-13 18:00:18
    Protobuf(Protocol Buffer)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。...
  • windows 环境下的 protoc 安装

    万次阅读 2016-07-01 08:06:50
    最近弄hadoop 代码 编译安装时,出现如下错误[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.6.4:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin....
  • Caffe 安装 指定protoc版本

    千次阅读 2017-12-05 10:25:30
    命令 whereis protoc 可以查看哪些路径下安装了protoc 命令which protoc 可以查看默认选用protoc的路径 命令 protoc --version 可以查看当前protoc版本 指定protoc的版本可以在 Makefile文件内修改 在...
  • Ubuntu系统下更新protoc

    千次阅读 2018-10-22 10:31:28
    在使用Tensorflow的目标检测API时需要使用到protoc(可执行文件)将目标检测文件夹下的一些proto文件编译成为python文件,由于Tensorflow的model还在不断更新,因此老版本的protoc可能不能将protoc文件正确编译,...
  • protoc版本问题

    千次阅读 2018-12-16 19:08:59
    接之前安装caffe帖子继续,安装完之后,因为protoc版本有问题,为3.6的版本,此处可以通过: 看哪里有安装protoc: # whereis protoc 现在用的protoc是在哪里安装的: # which protoc 查看目前正在使用的...
  • protobuf官方GRPC编译方式
1 2 3 4 5 ... 20
收藏数 14,835
精华内容 5,934
关键字:

protoc