安装

Copyright 2008 Google Inc.

https://developers.google.com/protocol-buffers/

Unix

要从源代码构建 protobuf,需要以下工具:

  • autoconf

  • automake

  • libtool

  • make

  • g++

  • unzip

在 Ubuntu/Debian 上,你可以用以下方法安装它们:

sudo apt-get install autoconf automake libtool curl make g++ unzip

在其他平台上,请使用相应的软件包管理工具进行安装,然后再继续。

要获得源代码,请下载发布页中的一个 .tar.gz 或 .zip 包:

https://github.com/protocolbuffers/protobuf/releases/latest

例如:如果你只需要 C++,请下载 protobuf-cpp-[VERSION].tar.gz;如果你需要 C++ 和 Java,请下载 protobuf-java-[VERSION].tar.gz(每个包都已经包含 C++ 的源代码);如果你需要 C++ 和多种其他语言,请下载 protobuf-all-[VERSION].tar.gz

你也可以通过 “git clone” 我们的 git 存储库来获得源代码。确保你也克隆了子模块并生成了配置脚本(如果你使用的是发布版的 .tar.gz 或 .zip 包,则跳过这一步):

git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh

要建立和安装 C++ 协议缓冲区运行时间和协议缓冲区编译器(protoc),请执行以下内容:

 ./configure
 make
 make check
 sudo make install
 sudo ldconfig # refresh shared library cache.

如果 “make check” 失败,你仍然可以安装,但这个库的某些功能很可能无法在你的系统上正确工作。请自行承担风险。

关于 configure 和 make 的高级使用信息,请参考 autoconf 文档:

http://www.gnu.org/software/autoconf/manual/autoconf.html#Running-configure-Scripts

关于安装位置的提示

默认情况下,该软件包将被安装到/usr/local。然而,在许多平台上,/usr/local/lib 并不是 LD_LIBRARY_PATH 的一部分。你可以添加它,但直接安装到/usr可能更容易。要做到这一点,请按如下方式调用 configure:

./configure --prefix=/usr

如果你已经用不同的前缀构建了软件包,请确保在再次构建之前运行 “make clean” 。

编译依赖的软件包

为了编译一个使用 Protocol Buffers 的软件包,你需要向你的编译器和链接器传递各种 旗标。从 2.2.0 版本开始,Protocol Buffers 集成了 pkg-config 来管理这些。如果你安装了 pkg-config,那么你可以调用它来获得一个 旗标 列表,就像这样:

pkg-config --cflags protobuf         # print compiler flags
pkg-config --libs protobuf           # print linker flags
pkg-config --cflags --libs protobuf  # print both

示例:

c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`

请注意,在协议缓冲区 2.2.0 版本之前编写的软件包可能还没有与 pkg-config 集成以获得旗标,并且可能没有传递正确的旗标集以正确链接到 libprotobuf。如果有问题的软件包使用 autoconf,你通常可以通过调用其配置脚本来解决这个问题,比如:

configure CXXFLAGS="$(pkg-config --cflags protobuf)" \
          LIBS="$(pkg-config --libs protobuf)"

这将迫使它使用正确的 旗标。

如果你正在编写一个基于 autoconf 的软件包,并使用协议缓冲区,你可能应该在你的配置脚本中使用 PKG_CHECK_MODULES 宏,比如:

PKG_CHECK_MODULES([protobuf], [protobuf])

更多信息请参见 pkg-config man 页。

如果你只想要 protobuf-lite,在这些例子中用 “protobuf-lite” 代替 “protobuf”。

Note for Mac users

For a Mac system, Unix tools are not available by default. You will first need to install Xcode from the Mac AppStore and then run the following command from a terminal:

sudo xcode-select --install

To install Unix tools, you can install “port” following the instructions at https://www.macports.org . This will reside in /opt/local/bin/port for most Mac installations.

sudo /opt/local/bin/port install autoconf automake libtool

Then follow the Unix instructions above.

交叉编译的注意事项

makefiles 通常会调用他们刚刚构建的 protoc 可执行文件,以构建测试。当交叉编译时,protoc 的可执行文件在主机上可能无法执行。在这种情况下,你必须先为主机建立一个 protoc 副本,然后用 --with-protoc 选项告诉 configure 用它来代替。比如说:

./configure --with-protoc=protoc

这将使用已安装的 protoc(在你的 $PATH 中找到),而不是试图执行在构建过程中构建的那个。你也可以使用一个尚未安装的可执行文件。例如,如果你在 ../host 中为你的主机构建了 protobuf 包,你可以这样做:

./configure --with-protoc=../host/src/protoc

无论如何,你必须确保你使用的 protoc 可执行文件的版本与你要使用的 protobuf 源代码的版本相同。

Note for Solaris users

Solaris 10 x86 has a bug that will make linking fail, complaining about libstdc++.la being invalid. We have included a work-around in this package. To use the work-around, run configure as follows:

./configure LDFLAGS=-L$PWD/src/solaris

See src/solaris/libstdc++.la for more info on this bug.

Note for HP C++ Tru64 users

To compile invoke configure as follows:

./configure CXXFLAGS="-O -std ansi -ieee -D__USE_STD_IOSTREAM"

Also, you will need to use gmake instead of make.

Note for AIX users

Compile using the IBM xlC C++ compiler as follows:

./configure CXX=xlC

Also, you will need to use GNU make (gmake) instead of AIX make.

C++ 安装 —— Windows

如果你只需要 protoc 二进制文件,你可以从发布页面下载:

https://github.com/protocolbuffers/protobuf/releases/latest

在下载部分,下载 zip 文件 protoc-$VERSION-win32.zip。它包含 protoc 二进制文件,以及 protobuf 库的公共 proto 文件。

Protobuf 和它的依赖项可以通过使用 vcpkg 直接安装:

>vcpkg install protobuf protobuf:x64-windows

如果需要 zlib 支持,你还需要安装 zlib 功能:

>vcpkg install protobuf[zlib] protobuf[zlib]:x64-windows

更多信息见 https://github.com/Microsoft/vcpkg。

要使用 Microsoft Visual C++ 从源码构建,请参见 cmake/README.md

要使用 Cygwin 或 MinGW 从源代码构建,请遵循上面的 Unix 安装说明。

二进制兼容警告

由于 C++ 的特性,任何两个版本的协议缓冲区 C++ 运行库都不可能有兼容的 ABI。也就是说,如果你用旧版本的 libprotobuf 链接了一个可执行文件,那么在不重新编译的情况下,它不可能在新版本中工作。这个问题一旦发生,通常会在你的应用程序启动时立即被发现。不过,你可能要考虑使用静态链接。你可以配置这个包,使其只安装静态库,使用:

./configure --disable-shared

用法

协议缓冲区的完整文档可通过网络获得:

https://developers.google.com/protocol-buffers/