在Mac上安装Google协议缓冲区


101

我想使用终端命令行在Mac上安装旧版本的Google协议缓冲区(protobuf-2.4.1)。我尝试使用brew install protobuf,但是已安装了最新版本2.5.0。是否可以从终端安装旧版本。

谢谢


2
为什么要使用旧版本?只要您重新生成.pb.h.pb.cc文件,它们就向后兼容。
Kenton Varda

我认为我最好使用旧版本,因为该项目是使用2.4.1构建的。但是正如您所说,我已经重新生成了这两个文件,并且工作正常。谢谢。
informatiker

4
通常,这是如何安装公式的特定版本
Duvrai 2014年

Answers:


146

在Mac上从源代码构建protobuf 2.4.1存在一些问题。还有一个补丁也必须应用。所有这些都包含在自制的protobuf241公式中,所以我建议您使用它。

要安装协议缓冲区版本2.4.1,请在终端中输入以下内容:

brew tap homebrew/versions
brew install protobuf241

如果已经有尝试从源代码安装的协议缓冲区版本,则可以在终端中键入以下内容,以使源代码被自制版本覆盖:

brew link --force --overwrite protobuf241

键入以下命令,检查是否已安装正确的版本:

protoc --version

它应该显示2.4.1


2
嘿,我想这一点,howeever上protoc --version我得到-bash:protoc:找不到命令
白木

版本2.4.1安装在“ /usr/local/Cellar/protobuf241/2.4.1”中,您只需创建一个符号链接“ ../2.4.1/protoc”并将其放在“ / usr / local / bin”中”。比“ protoc --version”尝试,并且应该完全按应有的方式工作。
Gyuri Majercsik

4
该水龙头不再可用
Mihai Todor

22
不再工作了。我明白了Warning: homebrew/versions was deprecated. This tap is now empty as all its formulae were migrated.
李世敏

1
它已迁移到核心,请改用它:brew tap homebrew / homebrew-core
HuyHómHỉnhJun

70

这不是通过冲泡,但最终结果是相同的。

  1. https://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz下载protobuf-2.4.1。
  2. 解压缩tar.gz文件。
  3. $ cd〜/ Downloads / protobuf-2.4.1
  4. $。/配置
  5. $ make
  6. $ make检查
  7. $ sudo进行安装
  8. $哪个协议
  9. $ protoc-版本

步骤4-7来自protobuf压缩包的README.txt文件。


2
我尝试了冲泡方法,但是对于最新版本的protobuf(现在为2.6.0),它可以使用上述确切步骤从源代码轻松编译。当您尝试扩展标准的原型定义(例如,通过扩展描述符.proto添加字段选项)时,这将变得更加有用,因为您需要原始资源,否则必须引用自制版本的安装中的地窖路径(丑陋?) 。
Necro 2015年

2
在运行make命令时,我最终遇到以下错误:3个错误。make [2]:*** [message.lo]错误1 make [1]:*** [所有递归]错误1 make:*** [全部]错误2
Anandaraja_Srinivasan

这是为我工作的解决方案。但是在制作过程中遇到错误时,请参阅楚小琦的答复。
Amudhan '16

步骤4-7在/protobuf/src/README.md,我希望它README.md/protobuf目录中
Kevin Zhao

4
这对我有用
r00tt

34

这是新的一年,protobufHomebrew 的版本与最新版本之间存在新的不匹配。截至2016年2月,brew install protobuf将为您提供2.6.1版。

如果要使用3.0 beta版本,则可以使用以下命令进行安装:

brew install --devel protobuf

17

如果您登陆此处寻找如何在Mac上安装协议缓冲区,则可以使用Homebrew通过运行以下命令来完成

brew install protobuf

它会安装最新版本的protobuf。对我来说,在撰写本文时,它安装了v3.7.1

如果您想安装旧版本,请从“ Protobuf软件包-Homebrew”的软件包页面中查找可用的版本。然后安装该软件包的特定版本。

此软件包中可用的最早的protobuf版本是v3.6.1.3


1
但是OP专门要求安装旧版本。
Himanshu Tanwar


12

由于某些原因,我需要在OS X El Capitan的项目中使用protobuf 2.4.1。但是,自制酒已从其配方中删除了protobuf241。我会根据@kksensei的答案手动安装它,并且必须在此过程中修复一些错误。

在制作过程中,出现以下3个错误:

google/protobuf/message.cc:130:60: error: implicit instantiation of undefined template 'std::__1::basic_istream<char, std::__1::char_traits<char> >'

  return ParseFromZeroCopyStream(&zero_copy_input) && input->eof();

                                                           ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:108:28: note: template is declared here

    class _LIBCPP_TYPE_VIS basic_istream;

                           ^

google/protobuf/message.cc:135:67: error: implicit instantiation of undefined template 'std::__1::basic_istream<char, std::__1::char_traits<char> >'

  return ParsePartialFromZeroCopyStream(&zero_copy_input) && input->eof();

                                                                  ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:108:28: note: template is declared here

    class _LIBCPP_TYPE_VIS basic_istream;

                           ^

google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template 'std::__1::basic_ostream<char, std::__1::char_traits<char> >'

  return output->good();

               ^

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iosfwd:110:28: note: template is declared here

    class _LIBCPP_TYPE_VIS basic_ostream;

                           ^

(对不起,当代码包含“`”时,我不知道如何附加代码)

如果您遇到相同的错误,请编辑src / google / protobuf / message.cc,#include <istream>在文件顶部添加并$ make再次执行,并且不会出现任何错误。之后做$ sudo make install。安装完成后$protoc --version应显示正确的结果。




2

FWIW。,brew的最新版本是protobuf 3.0,并且不包含较旧版本的任何公式。这有点“不方便”。

虽然protobuf可能在线路级别兼容,但在生成的Java类级别绝对不兼容:您不能将protoc 2.4生成的.class文件与protobuf-2.5 JAR等一起使用,等等。这就是为什么进行更新的原因protobuf版本在Hadoop堆栈中是一个敏感的话题:它始终需要跨不同项目的协调,并且所受的伤害非常大,以至于没人喜欢这样做。


2

要安装协议缓冲区(从今天的v3.7.0版本开始)

  1. 转到这个网站
  2. 根据您的操作系统下载zip文件(例如:protoc-3.7.0-osx-x86_64.zip)。这也适用于其他操作系统。

  3. 将protoc-3 / bin / protoc中的可执行文件移动到PATH中的目录之一。在Mac中,我建议将其放入/ usr / local / bin

现在你该走了good

(可选)还有一个包含文件,您可以添加。这是README.md的摘录

If you intend to use the included well known types then don't forget to
copy the contents of the 'include' directory somewhere as well, for example
into '/usr/local/include/'.

Please refer to our official github site for more installation instructions:
https://github.com/protocolbuffers/protobuf

2

正如另一位用户提到的,Google还有另一种官方方式。

尝试之前,请先完整阅读。

步骤如下:

打开终端并输入以下内容

  1. PROTOC_ZIP=protoc-3.7.1-osx-x86_64.zip
  2. curl -OL https://github.com/google/protobuf/releases/download/v3.7.1/$PROTOC_ZIP
  3. sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
  4. rm -f $PROTOC_ZIP

为我工作。

PS
这仅适用于osx中的3.7.1版本。如果您要安装其他版本/平台,请访问发布链接并查看最新版本的详细信息,然后使用这些信息。 参考


1
漂亮又简单。谢谢!:tada:
rodrigo-silveira



0

HomeBrew版本已删除,配方已清空。因此,我的建议是按照以下步骤手动安装它。

目前,您将需要手动构建和安装Protocol Buffers工具集。

  1. 下载源代码:https : //github.com/google/protobuf/releases/download/v2.4.1/protobuf-2.4.1.tar.gz

  2. tar xvfz protobuf-2.4.1.tar.gz

  3. cd protobuf-2.4.1

  4. ./configure

  5. 修改src / google / protobuf / message.cc,在文件顶部添加#include

  6. make从文件夹的根目录运行命令,即protobuf-2.4.1 /

  7. sudo make install

  8. 运行/usr/local/bin/protoc --version以检查protobuf编译器的版本终端输出应为:

    Version: libprotoc 2.4.1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.