珍娱客>科技>nanopb和ProtoBuf的关系>正文

nanopb和ProtoBuf的关系

历史2022-05-140 次阅读

同样跟其他类似,nanopb也是以plugin的方式跟protoc进行配合。通过插件的形式进行开发,这样可以省去额外的解析proto文件的工作,通过stdin以CodeGeneratorRequest Message的方式直接传入就可以直接进行对应的代码生成,同时把生成好的代码写入到CodeGeneratorResponse再返回给protoc即可

因此有下面几个依赖的库需要安装:

  • protobuf-compiler - 顾名思义,他是protoc,用来帮你解析对应的proto文件
  • python-protobuf - 这是用来进行插件开发的语言,是implement plugin需要的语音库,但是这个跟他生成具体某个语言无关,只是用来实现plugin,在这里因为nanopb是用python写的,因此我们需要安装这个库

当全部就位之后,我们可以通过以下几种方法进行调用:

  1. 预装二进制 nanopb有预装二进制版本,装完之后,protoc也会一同下下来放在generator-bin目录里,当就绪之后,你只需要运行 generator-bin/protoc --nanopb_out=. to即可,就跟 protoc自定义插件的命令行调用以及简单工作原理 提到的一样,这里的nanopb_out才是触发插件的本质,他会去PATH里去插找protoc-gen-nanopb这个可执行程序
  2. 从头安装 如果你拥有自己的protoc和library, 你需要手动去指定nanopb generator (plugin)的位置 protoc --plugin=protoc-gen-nanopb=nanopb/generator/protoc-gen-nanopb ... 这里的protoc-gen-nanopb=nanopb/generator/protoc-gen-nanopb就是告诉protoc我们有一个插件叫protoc-gen-nanopb,所以他对应的out选项就是nanopb_out(当我们要触发的时候就通过这个选项),同时告诉protoc这个插件对应的位置在nanopb/generator/protoc-gen-nanopb