A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Protocol Buffers
是一种以有效但可扩展的格式对结构化数据进行编码的方法,它可能以文件格式和 RPC 协议使用。
- -bash/zsh: protoc command not found
- #Debian
- apt-get install protobuf-compiler
- #Ubuntu
- apt-get install protobuf-compiler
- #Alpine
- apk add protobuf
- #Arch Linux
- pacman -S protobuf
- #Kali Linux
- apt-get install protobuf-compiler
- #CentOS
- yum install protobuf-compiler
- #Fedora
- dnf install protobuf-compiler
- #OS X
- brew install protobuf
- #Raspbian
- apt-get install protobuf-compiler
- #Docker
- docker run cmd.cat/protoc protoc
- #Github 上的版本发布地址
- https://github.com/protocolbuffers/protobuf/releases
protoc 命令,用于解析 Google Protobuf
的 .proto 文件,并以指定的语言(如 Java, C#, PHP, Python...)生成输出。
- 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.
- If not found in any of the these directories,
- the --descriptor_set_in descriptors will be
- checked for required proto file.
- --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.
- --descriptor_set_in=FILES Specifies a delimited list of FILES
- each containing a FileDescriptorSet (a
- protocol buffer defined in descriptor.proto).
- The FileDescriptor for each of the PROTO_FILES
- provided will be loaded from these
- FileDescriptorSets. If a FileDescriptor
- appears multiple times, the first occurrence
- will be used.
- -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.
- --js_out=OUT_DIR Generate JavaScript source.
- --objc_out=OUT_DIR Generate Objective C header and source.
- --php_out=OUT_DIR Generate PHP source file.
- --python_out=OUT_DIR Generate Python source file.
- --ruby_out=OUT_DIR Generate Ruby source file.
- @<filename> Read options and filenames from file. If a
- relative file path is specified, the file
- will be searched in the working directory.
- The --proto_path option will not affect how
- this argument file is searched. Content of
- the file will be expanded in the position of
- @<filename> as in the argument list. Note
- that shell expansion is not applied to the
- content of the file (i.e., you cannot use
- quotes, wildcards, escapes, commands, etc.).
- Each line corresponds to a single argument,
- even if it contains spaces.
- proto 描述文件及输出目录
protoc 根据 proto 描述文件,生成不同语言的类代码:
- #Python code from a `.proto` file:
- protoc --python_out=path/to/output_directory input_file.proto
- #Java code from a `.proto` file that imports other `.proto` files:
- protoc --java_out=path/to/output_directory --proto_path=path/to/import_search_path input_file.proto
- #Generate code for multiple languages:
- protoc --csharp_out=path/to/c#_output_directory --js_out=path/to/js_output_directory input_file.proto
当前下载 protobuf 2 的最后一个版本
- wget https://github.com/google/protobuf/archive/v2.6.1.zip
- unzip v2.6.1.zip -d ./
- cd protobuf-2.6.1
- sudo apt-get install autoconf automake libtool
- ./autogen.sh
- 如果无法连接 Google 的网站则修改:
- curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx
- mv gtest-1.5.0 gtest
- 为如下:
- wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz
- tar xzvf release-1.5.0.tar.gz
- mv googletest-release-1.5.0 gtest
- ./configure -h #查看帮助
- ./configure prefix=/Data/apps/protoc-2.6.1 #指定安装目录
- make && make install
- #Github 版本发布页面
- https://github.com/allegro/php-protobuf/releases
- #下载最新发布的版本(2019.01.07 版本为 v0.12.4)
- wget https://github.com/allegro/php-protobuf/archive/v0.12.4.tar.gz
- #解压到当前目录
- unzip v0.12.4.zip -d ./
- cd php-protobuf-0.12.4
- phpize
- ./configure --with-php-config=/Data/apps/php/bin/php-config #可以指定之前的编译配置
- make
- make install
- 配置 php.ini
- extension=protobuf.so
- $ php --ri protobuf
- protobuf
- Version => 0.12.3
composer install
安装即可
- #Baidu 为当前目录,根据百度 proto 描述文件,生成百度聚屏的 PHP 类文件
- ./protoc --plugin=protoc-gen-allegrophp=/Data/tools/php-protobuf/protoc-gen-php.php --allegrophp_out=Baidu ts_ui_api_v20191205.proto
修改完 php.ini 后,执行 /etc/init.d/php-fpm restart
,PHP 查看是否已加载的所有的 so
:
- $ php -m
- [PHP Modules]
- bcmath
- bz2
- calendar
- Core
- ctype
- curl
- date
- dba
- dom
- exif
- fileinfo
- filter
- ftp
- gd
- gettext
- gmp
- hash
- iconv
- json
- libxml
- mbstring
- memcache
- memcached
- mysqli
- mysqlnd
- openssl
- pcre
- PDO
- pdo_mysql
- pdo_sqlite
- Phar
- posix
- protobuf
- readline
- redis
- Reflection
- session
- shmop
- SimpleXML
- soap
- sockets
- SPL
- sqlite3
- standard
- sysvmsg
- sysvsem
- sysvshm
- tokenizer
- wddx
- xml
- xmlreader
- xmlrpc
- xmlwriter
- xsl
- Zend OPcache
- zip
- zlib
- [Zend Modules]
- Zend OPcache