抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Ubuntu Protocol Buffers install/uninstall.

背景:工作中遇到需要参与 pb 文件解析时,我这里主要指行情相关配置文件。

系统:elementary OS 5.1.7 Hera(基于 Ubuntu 18.04.6 LTS 构建)

不知道是因为 Ubuntu 太旧导致源中的 protobuf-compiler 太旧,又或者官方更新太频繁 Ubuntu ppa 不愿意同步,记录一下简单的卸载与安装。

如果商店的 protobuf 版本刚好是自己需要的版本着无需折腾(sudo apt install protobuf-compiler)。不然~

源文件下载

官方的 release 包是托管在 GitHub 的:https://github.com/protocolbuffers/protobuf/releases

按需选择对应架构的源码包,我这里选择:protobuf-all-21.5.tar.gz

编译/安装

解压上述源码包,cd 到解压目录,执行:

./configure

接着编译的常规套路:

make && make install

PS:根据每个系统环境的不同,make install 可能需要 sudo 提权。

不出意外安装完成可以看看版本:

protoc --version

卸载

在源码目录执行(根据安装时的权限,也可能需要 sudo):

make uninstall

用法

至于这个东西怎么用~ 就看需求方要求,Python 就转成 Python 脚本,Java 就转 Java 代码,pb 文件转完才能用。因为它本身是一种数据协议:

Protocol Buffers(简称:ProtoBuf)是一种开源跨平台的序列化资料结构的协议。其对于储存资料或在网络上进行通讯的程式是很有用的。这个方法包含一个接口描述语言,描述一些资料结构,并提供程式工具根据这些描述产生程式码,这些代码将用来生成或解析代表这些数据结构的字节流。

例如:

转 Python:

protoc --python_out=./pb/py --proto_path=./pb/ ./pb/*.proto

转 Java:

protoc --java_out=./pb/java --proto_path=./pb/ ./pb/*.proto

转 OC:

protoc --objc_out=./pb/oc --proto_path=./pb/ ./pb/*.proto

其他

多出来的那些文件就是我们需要用的文件,至于针对 Java 文件太大的情况,需要做下分包。这部分参考:

https://developers.google.com/protocol-buffers/docs/reference/java-generated

翻译下就是(搬运):

--java_out=当使用命令行标志调用协议缓冲区编译器时,会产生 Java 输出。该--java_out=选项的参数是您希望编译器编写 Java 输出的目录。对于每个.proto文件输入,编译器都会创建一个包装.java文件,其中包含一个代表.proto文件本身的 Java 类。

如果.proto文件包含如下行:

option java_multiple_files = true;

.java然后编译器还为文件中声明的每个顶级消息、枚举和服务创建一个单独的.proto文件。

否则(即选项为 false 时;这是默认值),上述包装类也用作外部类,并为文件java_multiple_files中声明的每个顶级消息、枚举和服务生成类/枚举 .proto都嵌套在外部包装类中。

举栗:

syntax = "proto3";
package HqPcDef;

//加文件头在这里
option java_multiple_files = true;

...

在 Android 上的使用

参考:https://mp.weixin.qq.com/s/sgFFoWM0-AAvwFqmfFj6Jg 我就不搬运了。

以上;

参考:

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

https://zh.m.wikipedia.org/zh-hans/Protocol_Buffers


本站由以下主机服务商提供服务支持:

0条评论

发表评论