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