安装¶
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