|
@@ -0,0 +1,124 @@
|
|
|
+# Protocol Buffers - Code Example
|
|
|
+
|
|
|
+This directory contains example code that uses Protocol Buffers to manage an
|
|
|
+address book. Two programs are provided for each supported language. The
|
|
|
+add_person example adds a new person to an address book, prompting the user to
|
|
|
+input the person's information. The list_people example lists people already in
|
|
|
+the address book. The examples use the exact same format in all three languages,
|
|
|
+so you can, for example, use add_person_java to create an address book and then
|
|
|
+use list_people_python to read it.
|
|
|
+
|
|
|
+These examples are part of the Protocol Buffers tutorial, located at:
|
|
|
+ https://developers.google.com/protocol-buffers/docs/tutorials
|
|
|
+
|
|
|
+## Build the example using bazel
|
|
|
+
|
|
|
+The example requires bazel 0.5.4 or newer to build. You can download/install
|
|
|
+the latest version of bazel from bazel's release page:
|
|
|
+
|
|
|
+ https://github.com/bazelbuild/bazel/releases
|
|
|
+
|
|
|
+Once you have bazel installed, simply run the following command in this examples
|
|
|
+directory to build the code:
|
|
|
+
|
|
|
+ $ bazel build :all
|
|
|
+
|
|
|
+Then you can run the built binary:
|
|
|
+
|
|
|
+ $ bazel-bin/add_person_cpp addressbook.data
|
|
|
+
|
|
|
+To use protobuf in your own bazel project, please follow instructions in the
|
|
|
+[BUILD](BUILD) file and [WORKSPACE](WORKSPACE) file.
|
|
|
+
|
|
|
+## Build the example using make
|
|
|
+
|
|
|
+You must install the protobuf package before you can build it using make. The
|
|
|
+minimum requirement is to install protocol compiler (i.e., the protoc binary)
|
|
|
+and the protobuf runtime for the language you want to build.
|
|
|
+
|
|
|
+You can simply run "make" to build the example for all languages (except for
|
|
|
+Go). However, since different language has different installation requirement,
|
|
|
+it will likely fail. It's better to follow individual instrutions below to
|
|
|
+build only the language you are interested in.
|
|
|
+
|
|
|
+### C++
|
|
|
+
|
|
|
+You can follow instructions in [../src/README.md](../src/README.md) to install
|
|
|
+protoc and protobuf C++ runtime from source.
|
|
|
+
|
|
|
+Then run "make cpp" in this examples directory to build the C++ example. It
|
|
|
+will create two executables: add_person_cpp and list_people_cpp. These programs
|
|
|
+simply take an address book file as their parameter. The add_person_cpp
|
|
|
+programs will create the file if it doesn't already exist.
|
|
|
+
|
|
|
+To run the examples:
|
|
|
+
|
|
|
+ $ ./add_person_cpp addressbook.data
|
|
|
+ $ ./list_people_cpp addressbook.data
|
|
|
+
|
|
|
+Note that on some platforms you may have to edit the Makefile and remove
|
|
|
+"-lpthread" from the linker commands (perhaps replacing it with something else).
|
|
|
+We didn't do this automatically because we wanted to keep the example simple.
|
|
|
+
|
|
|
+### Python
|
|
|
+
|
|
|
+Follow instructions in [../README.md](../README.md) to install protoc and then
|
|
|
+follow [../python/README.md](../python/README.md) to install protobuf python
|
|
|
+runtime from source. You can also install python runtime using pip:
|
|
|
+
|
|
|
+ $ pip install protobuf
|
|
|
+
|
|
|
+Make sure the runtime version is the same as protoc binary, or it may not work.
|
|
|
+
|
|
|
+After you have install both protoc and python runtime, run "make python" to
|
|
|
+build two executables (shell scripts actually): add_person_python and
|
|
|
+list_people_python. They work the same way as the C++ executables.
|
|
|
+
|
|
|
+### Java
|
|
|
+
|
|
|
+Follow instructions in [../README.md](../README.md) to install protoc and then
|
|
|
+download protobuf Java runtime .jar file from maven:
|
|
|
+
|
|
|
+ https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java
|
|
|
+
|
|
|
+Then run the following:
|
|
|
+
|
|
|
+ $ export CLASSPATH=/path/to/protobuf-java-[version].jar
|
|
|
+ $ make java
|
|
|
+
|
|
|
+This will create the add_person_java/list_people_java executables (shell
|
|
|
+scripts) and can be used to create/display an address book data file.
|
|
|
+
|
|
|
+### Go
|
|
|
+
|
|
|
+The Go example requires a plugin to the protocol buffer compiler, so it is not
|
|
|
+build with all the other examples. See:
|
|
|
+
|
|
|
+ https://github.com/golang/protobuf
|
|
|
+
|
|
|
+for more information about Go protocol buffer support.
|
|
|
+
|
|
|
+First, install the Protocol Buffers compiler (protoc).
|
|
|
+
|
|
|
+Then, install the Go Protocol Buffers plugin ($GOPATH/bin must be in your $PATH
|
|
|
+for protoc to find it):
|
|
|
+
|
|
|
+ go get github.com/golang/protobuf/protoc-gen-go
|
|
|
+
|
|
|
+Build the Go samples in this directory with "make go". This creates the
|
|
|
+following executable files in the current directory:
|
|
|
+
|
|
|
+ add_person_go list_people_go
|
|
|
+
|
|
|
+To run the example:
|
|
|
+
|
|
|
+ ./add_person_go addressbook.data
|
|
|
+
|
|
|
+to add a person to the protocol buffer encoded file addressbook.data. The file
|
|
|
+is created if it does not exist. To view the data, run:
|
|
|
+
|
|
|
+ ./list_people_go addressbook.data
|
|
|
+
|
|
|
+Observe that the C++, Python, and Java examples in this directory run in a
|
|
|
+similar way and can view/modify files created by the Go example and vice
|
|
|
+versa.
|