• Home
Name Date Size #Lines LOC

..--

google/protobuf/12-May-2024-279,963206,190

Makefile.amD12-May-202452.7 KiB899828

README.mdD12-May-20248.4 KiB233152

libprotobuf-lite.mapD12-May-202474 108

libprotobuf.mapD12-May-202474 108

libprotoc.mapD12-May-202474 108

README.md

1Protocol Buffers - Google's data interchange format
2===================================================
3
4[![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/linux-cpp_distcheck.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fubuntu%2Fcpp_distcheck%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/linux-bazel.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fubuntu%2Fbazel%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/macos-cpp.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fmacos%2Fcpp%2Fcontinuous) [![Build status](https://storage.googleapis.com/protobuf-kokoro-results/status-badge/macos-cpp_distcheck.png)](https://fusion.corp.google.com/projectanalysis/current/KOKORO/prod:protobuf%2Fgithub%2Fmaster%2Fmacos%2Fcpp_distcheck%2Fcontinuous) [![Build status](https://ci.appveyor.com/api/projects/status/73ctee6ua4w2ruin?svg=true)](https://ci.appveyor.com/project/protobuf/protobuf)
5
6Copyright 2008 Google Inc.
7
8https://developers.google.com/protocol-buffers/
9
10C++ Installation - Unix
11-----------------------
12
13To build protobuf from source, the following tools are needed:
14
15  * autoconf
16  * automake
17  * libtool
18  * make
19  * g++
20  * unzip
21
22On Ubuntu/Debian, you can install them with:
23
24    $ sudo apt-get install autoconf automake libtool curl make g++ unzip
25
26On other platforms, please use the corresponding package managing tool to
27install them before proceeding.
28
29To get the source, download one of the release .tar.gz or .zip packages in the
30release page:
31
32    https://github.com/protocolbuffers/protobuf/releases/latest
33
34For example: if you only need C++, download `protobuf-cpp-[VERSION].tar.gz`; if
35you need C++ and Java, download `protobuf-java-[VERSION].tar.gz` (every package
36contains C++ source already); if you need C++ and multiple other languages,
37download `protobuf-all-[VERSION].tar.gz`.
38
39You can also get the source by "git clone" our git repository. Make sure you
40have also cloned the submodules and generated the configure script (skip this
41if you are using a release .tar.gz or .zip package):
42
43    git clone https://github.com/protocolbuffers/protobuf.git
44    cd protobuf
45    git submodule update --init --recursive
46    ./autogen.sh
47
48To build and install the C++ Protocol Buffer runtime and the Protocol
49Buffer compiler (protoc) execute the following:
50
51
52     ./configure
53     make
54     make check
55     sudo make install
56     sudo ldconfig # refresh shared library cache.
57
58If "make check" fails, you can still install, but it is likely that
59some features of this library will not work correctly on your system.
60Proceed at your own risk.
61
62For advanced usage information on configure and make, please refer to the
63autoconf documentation:
64
65    http://www.gnu.org/software/autoconf/manual/autoconf.html#Running-configure-Scripts
66
67**Hint on install location**
68
69By default, the package will be installed to /usr/local.  However,
70on many platforms, /usr/local/lib is not part of LD_LIBRARY_PATH.
71You can add it, but it may be easier to just install to /usr
72instead.  To do this, invoke configure as follows:
73
74    ./configure --prefix=/usr
75
76If you already built the package with a different prefix, make sure
77to run "make clean" before building again.
78
79**Compiling dependent packages**
80
81To compile a package that uses Protocol Buffers, you need to pass
82various flags to your compiler and linker.  As of version 2.2.0,
83Protocol Buffers integrates with pkg-config to manage this.  If you
84have pkg-config installed, then you can invoke it to get a list of
85flags like so:
86
87
88    pkg-config --cflags protobuf         # print compiler flags
89    pkg-config --libs protobuf           # print linker flags
90    pkg-config --cflags --libs protobuf  # print both
91
92
93For example:
94
95    c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`
96
97Note that packages written prior to the 2.2.0 release of Protocol
98Buffers may not yet integrate with pkg-config to get flags, and may
99not pass the correct set of flags to correctly link against
100libprotobuf.  If the package in question uses autoconf, you can
101often fix the problem by invoking its configure script like:
102
103
104    configure CXXFLAGS="$(pkg-config --cflags protobuf)" \
105              LIBS="$(pkg-config --libs protobuf)"
106
107This will force it to use the correct flags.
108
109If you are writing an autoconf-based package that uses Protocol
110Buffers, you should probably use the PKG_CHECK_MODULES macro in your
111configure script like:
112
113    PKG_CHECK_MODULES([protobuf], [protobuf])
114
115See the pkg-config man page for more info.
116
117If you only want protobuf-lite, substitute "protobuf-lite" in place
118of "protobuf" in these examples.
119
120**Note for Mac users**
121
122For a Mac system, Unix tools are not available by default. You will first need
123to install Xcode from the Mac AppStore and then run the following command from
124a terminal:
125
126    sudo xcode-select --install
127
128To install Unix tools, you can install "port" following the instructions at
129https://www.macports.org . This will reside in /opt/local/bin/port for most
130Mac installations.
131
132    sudo /opt/local/bin/port install autoconf automake libtool
133
134Then follow the Unix instructions above.
135
136**Note for cross-compiling**
137
138The makefiles normally invoke the protoc executable that they just
139built in order to build tests.  When cross-compiling, the protoc
140executable may not be executable on the host machine.  In this case,
141you must build a copy of protoc for the host machine first, then use
142the --with-protoc option to tell configure to use it instead.  For
143example:
144
145    ./configure --with-protoc=protoc
146
147This will use the installed protoc (found in your $PATH) instead of
148trying to execute the one built during the build process.  You can
149also use an executable that hasn't been installed.  For example, if
150you built the protobuf package for your host machine in ../host,
151you might do:
152
153    ./configure --with-protoc=../host/src/protoc
154
155Either way, you must make sure that the protoc executable you use
156has the same version as the protobuf source code you are trying to
157use it with.
158
159**Note for Solaris users**
160
161Solaris 10 x86 has a bug that will make linking fail, complaining
162about libstdc++.la being invalid.  We have included a work-around
163in this package.  To use the work-around, run configure as follows:
164
165    ./configure LDFLAGS=-L$PWD/src/solaris
166
167See src/solaris/libstdc++.la for more info on this bug.
168
169**Note for HP C++ Tru64 users**
170
171To compile invoke configure as follows:
172
173    ./configure CXXFLAGS="-O -std ansi -ieee -D__USE_STD_IOSTREAM"
174
175Also, you will need to use gmake instead of make.
176
177**Note for AIX users**
178
179Compile using the IBM xlC C++ compiler as follows:
180
181    ./configure CXX=xlC
182
183Also, you will need to use GNU `make` (`gmake`) instead of AIX `make`.
184
185C++ Installation - Windows
186--------------------------
187
188If you only need the protoc binary, you can download it from the release
189page:
190
191    https://github.com/protocolbuffers/protobuf/releases/latest
192
193In the downloads section, download the zip file protoc-$VERSION-win32.zip.
194It contains the protoc binary as well as public proto files of protobuf
195library.
196
197Protobuf and its dependencies can be installed directly by using `vcpkg`:
198
199    >vcpkg install protobuf protobuf:x64-windows
200
201If zlib support is desired, you'll also need to install the zlib feature:
202
203    >vcpkg install protobuf[zlib] protobuf[zlib]:x64-windows
204
205See https://github.com/Microsoft/vcpkg for more information.
206
207To build from source using Microsoft Visual C++, see [cmake/README.md](../cmake/README.md).
208
209To build from source using Cygwin or MinGW, follow the Unix installation
210instructions, above.
211
212Binary Compatibility Warning
213----------------------------
214
215Due to the nature of C++, it is unlikely that any two versions of the
216Protocol Buffers C++ runtime libraries will have compatible ABIs.
217That is, if you linked an executable against an older version of
218libprotobuf, it is unlikely to work with a newer version without
219re-compiling.  This problem, when it occurs, will normally be detected
220immediately on startup of your app.  Still, you may want to consider
221using static linkage.  You can configure this package to install
222static libraries only using:
223
224    ./configure --disable-shared
225
226Usage
227-----
228
229The complete documentation for Protocol Buffers is available via the
230web at:
231
232    https://developers.google.com/protocol-buffers/
233