测试已测试 | ✗ |
Lang语言 | C++C++ |
许可证 | BSD |
发布上次发布 | 2016 年 7 月 |
由 阿凡树、liuyufeng2014、Graham Perks、schillerGao 维护。
版权所有 2008 Google Inc.
https://developers.google.com/protocol-buffers/
如果您从 github 获取源码,您需要首先生成配置脚本
$ ./autogen.sh
这将下载 gtest 源码(用于 C++ Protocol Buffer 单元测试)到当前目录,并运行 automake、autoconf 等来生成配置脚本和各种模板 makefile。
如果您使用的是发行版软件包(其中已经包含 gtest 和配置脚本),则可以跳过此步骤。
要编译和安装 C++ Protocol Buffer 运行时和 Protocol Buffer 编译器(protoc),请执行以下操作:
$ ./configure
$ make
$ make check
$ make install
如果 "make check" 失败,您仍然可以安装,但这可能导致该库的一些功能在您的系统上无法正确运行。请在自己的风险下进行。
"make install" 可能需要超级用户权限。
有关配置和 make 的高级使用信息,请参阅 INSTALL.txt。
安装位置提示
默认情况下,包将被安装到 /usr/local。然而,在许多平台上,/usr/local/lib 不属于 LD_LIBRARY_PATH。您可以将其添加,但可能更容易将它安装到 /usr。为此,请按照以下方式调用配置程序:
./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`
请注意,在 Protocol Buffers 2.2.0 版本之前编写的包可能尚未与 pkg-config 集成以获取标志,并且可能没有正确传递标志集以正确链接到 libprotobuf。如果涉及的包使用了 autoconf,通常可以通过调用其配置脚本来修复问题,如下所示:
configure CXXFLAGS="$(pkg-config --cflags protobuf)" \
LIBS="$(pkg-config --libs protobuf)"
这将强制它使用正确的标志。
如果您正在编写一个基于 autoconf 的使用 Protocol Buffers 的包,您可能在配置脚本中应该使用 PKG_CHECK_MODULES 宏,如下所示:
PKG_CHECK_MODULES([protobuf], [protobuf])
有关更多信息,请参阅 pkg-config 手册页。
如果您只想使用 protobuf-lite,在这些示例中将 "protobuf" 替换为 "protobuf-lite"。
交叉编译提示
通常,makefile会调用刚刚构建的protoc可执行文件来构建测试。在进行交叉编译时,protoc可执行文件可能在主机机器上无法执行。在这种情况下,您必须首先为主机机器构建一个protoc的副本,然后使用--with-protoc选项告诉configure使用它。例如:
./configure --with-protoc=protoc
这将使用已安装的protoc(位于您的$PATH中)而不是尝试在构建过程中构建的可执行文件。您还可以使用尚未安装的可执行文件。例如,如果您在../host中为主机构建了protobuf包,您可能这样做:
./configure --with-protoc=../host/src/protoc
无论如何,您必须确保您使用的protoc可执行文件与其想要使用的protobuf源代码具有相同的版本。
针对Solaris用户的备注
Solaris 10 x86有一个会导致链接失败并抱怨libstdc++.la无效的错误。我们在本包中包含了一个解决方法。要使用此方法,请按以下方式运行configure:
./configure LDFLAGS=-L$PWD/src/solaris
有关此错误的更多信息,请参阅src/solaris/libstdc++.la。
针对HP C++ Tru64用户的笔记
要编译,请按以下方式调用configure:
./configure CXXFLAGS="-O -std ansi -ieee -D__USE_STD_IOSTREAM"
此外,您还需要使用gmake而不是make。
如果您正在使用Microsoft Visual C++,请参阅vsprojects/readme.txt。
如果您正在使用Cygwin或MinGW,请遵循上面的Unix安装说明。
由于C++的性质,任何两个版本的Protocol Buffers C++运行时库都可能没有兼容的ABIs。也就是说,如果将可执行文件链接到较旧的libprotobuf版本,那么没有重新编译的情况下,不太可能与较新版本一起工作。当出现这个问题时,通常在应用程序启动时立即检测到。尽管如此,您可能仍然希望考虑使用静态链接。您可以使用以下命令配置此包以仅安装静态库
./configure --disable-shared
Protocol Buffers的Java和Python运行时库位于java和python目录中。有关如何编译和安装它们的更多信息,请参阅每个目录中的README文件。请注意,它们都要求您首先安装Protocol Buffer编译器(protoc),它是C++包的一部分。
Protocol Buffers的完整文档可通过以下网址在网络上获得:
https://developers.google.com/protocol-buffers/