在Mac上安装Google Protocol Buffers

130
我想在Mac上使用命令行/Terminal应用程序安装旧版本的Google Protocol Buffers (protobuf-2.4.1)。 我尝试了使用 "brew install protobuf" 命令,但却安装了最新版本2.5.0。 请问是否有可能从终端安装旧版本呢?

2
你为什么想要一个旧版本?只要你重新生成.pb.h.pb.cc文件,它们是向后兼容的。 - Kenton Varda
我认为最好使用旧版本,因为该项目是使用2.4.1构建的。但正如你所说,我已经重新生成了这两个文件,现在它可以正常工作了。谢谢。 - informatiker
4
一般来说,以下是如何安装特定版本的公式的步骤。 - Duvrai
16个回答

157

在Mac上从源代码构建protobuf 2.4.1存在一些问题。还需要应用补丁。所有内容都包含在homebrew protobuf241公式中,因此我建议使用它。

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

brew tap homebrew/versions
brew install protobuf241

如果您已经有一个尝试从源代码安装的协议缓冲区版本,您可以在终端中键入以下内容,以便将源代码被Homebrew版本覆盖:

如果您已经安装了协议缓冲区的源代码版本,则可以在终端中输入以下命令,以使源代码被 Homebrew 版本覆盖:

brew link --force --overwrite protobuf241

通过输入以下命令,检查您是否已经安装了正确版本:

protoc --version

它应该显示 2.4.1


4
嘿,我试过了,但在执行 protoc --version 命令时返回了“-bash: protoc:找不到命令”的错误信息。 - ramin
版本2.4.1已安装在“/usr/local/Cellar/protobuf241/2.4.1”,您只需创建一个符号链接“../2.4.1/protoc”,并将其放置在“/usr/local/bin”中。尝试运行“protoc --version”,应该可以正常工作。 - Gyuri Majercsik
4
那个水龙头已经不可用了。 - Mihai Todor
try ./protoc --version - james.garriss
33
不再起作用了。我收到了一个警告:homebrew/versions已被弃用。该存储库现在为空,因为其所有配方都已迁移。 - Shih-Min Lee
3
它已经迁移到核心,使用这个代替:brew tap homebrew/homebrew-core。 - Huy Hóm Hỉnh

108
这不是通过brew来完成的,但最终结果是一样的。
  1. https://github.com/protocolbuffers/protobuf/releases/tag/v2.4.1下载protobuf-2.4.1。
  2. 解压tar.gz文件。
  3. cd ~/Downloads/protobuf-2.4.1
  4. ./configure
  5. make
  6. make check
  7. sudo make install
  8. which protoc
  9. protoc --version
步骤4-7来自protobuf tarball的README.txt文件。

2
我尝试了brew方法,但对于最新版本的protobuf(现在是2.6.0),使用上述确切步骤从源代码编译很容易。当尝试扩展标准proto定义(例如通过扩展descriptor.proto添加字段选项)时,这变得更加有用,因为您需要原始源代码,否则必须引用home-brew安装版本的Cellar路径(丑陋?)。 - Necro
6
运行make命令时出现了错误:3个错误被生成。 make[2]: *** [message.lo] 错误1 make[1]: *** [all-recursive] 错误1 make: *** [all] 错误2 - Anandaraja_Srinivasan
1
这是对我有效的解决方案。但在进行make过程中遇到错误时,请参考Xiaoqi Chu的回复。 - Amudhan
2
步骤4-7在/protobuf/src/README.md中,我希望它在/protobuf目录下的README.md中。 - Kevin Zhao
6
这对我有效,唯一的变化是您需要从https://github.com/google/protobuf/releases下载源代码。 - r00tt
显示剩余4条评论

40
如果您来这里是想了解如何在Mac上安装Protocol Buffers,可以使用Homebrew运行下面的命令来完成。
brew install protobuf

它会安装可用的最新版本的协议缓冲区。在我撰写本文时,这个命令安装了v3.7.1版本。

如果您想安装旧版本,请查看Protobuf Package - Homebrew包页面中提供的版本,并安装该特定版本的包。

此软件包中提供的最旧版本的protobuf是v3.6.1.3


2
但是OP特别要求安装旧版本。 - Himanshu Tanwar

35

新的一年到了,Homebrew 中的 protobuf 版本与最新版本不匹配。截至 2016 年 2 月,brew install protobuf 将安装版本为 2.6.1。

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

brew install --devel protobuf

无效选项 --devel - Nicholas Jela

14

注意,从未知来源安装时建议始终扫描公式。我这样做了,很安全。 - Agoston Horvath

14
由于某种原因,我需要在我的OS X El Capitan项目中使用protobuf 2.4.1。然而,Homebrew已经从其公式中删除了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
这在我的macOS Catalina上有效!节省了我数小时,谢谢! - Sunil L

10
我使用了MacPorts。
sudo port install protobuf-cpp

8

安装Protocol Buffer(截至今天的版本为v3.7.0)

  1. 进入此网站
  2. 根据你的操作系统下载zip文件(例如:protoc-3.7.0-osx-x86_64.zip)。其他操作系统也适用。

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

现在可以使用了

(可选) 还有一个可添加的包含文件。以下是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

6
brew install --devel protobuf

如果它告诉你 "protobuf-2.6.1已经安装": 1. brew uninstall --devel protobuf 2. brew link libtool 3. brew install --devel protobuf


5
另一个用户提到了谷歌的另一种官方方式。在尝试之前请完全阅读以下内容。
以下是步骤:
打开终端并输入以下命令
  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
对我有效。
注:
此为osx上3.7.1版本。如果要安装其他版本或平台,请访问发布链接,查看最新版本的详细信息,并使用这些信息。 参考

2
简�易懂,谢谢�� - rodrigo-silveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接