【问题标题】:Installing Google Protocol Buffers on mac在 Mac 上安装 Google 协议缓冲区
【发布时间】:2026-01-19 03:40:01
【问题描述】:

我想使用命令行/终端应用在 Mac 上安装旧版本的 Google Protocol Buffers (protobuf-2.4.1)。

我尝试使用brew install protobuf,但已安装最新版本 2.5.0。

是否可以从终端安装旧版本?

【问题讨论】:

  • 为什么要旧版本?只要您重新生成 .pb.h.pb.cc 文件,它们就向后兼容。
  • 我认为我最好使用旧版本,因为该项目是使用 2.4.1 构建的。但正如你所说,我已经重新生成了这两个文件,它工作正常。谢谢。
  • 一般来说,这里是install a specific version of a formula的方法。

标签: protocol-buffers homebrew


【解决方案1】:

这不是通过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 检查
  7. $sudo 安装
  8. $which 协议
  9. $protoc --version

步骤 4-7 来自 protobuf tarball 中的 README.txt 文件。

【讨论】:

  • 我尝试了 brew 方法,但对于最新版本的 protobuf(现在是 2.6.0),它可以使用上述步骤的确切列表从源代码轻松编译。这在尝试扩展标准 proto 定义(例如,通过扩展 descriptor.proto 添加字段选项)时变得更加有用,因为您需要原始源或必须在自制版本的安装中引用 Cellar 路径(丑陋?) .
  • 在运行 make 命令时,我遇到了错误:生成了 3 个错误。 make[2]: *** [message.lo] 错误 1 ​​make[1]: *** [all-recursive] 错误 1 ​​make: *** [all] 错误 2
  • 这是对我有用的解决方案。但是在遇到make过程中的错误时,请看小七楚的回复。
  • 步骤 4-7 在/protobuf/src/README.md,我希望它在/protobuf 目录中的README.md
  • 这对我有用,唯一的变化是你需要从github.com/google/protobuf/releases下载源代码
【解决方案2】:

应该有更好的方法,但我今天所做的是:

  1. https://github.com/protocolbuffers/protobuf/releases下载(此时为protoc-3.14.0-osx-x86_64.zip

  2. 解压(双击zip文件)

  3. 在这里,我添加了一个符号链接

ln -s ~/Downloads/protoc-3.14.0-osx-x86_64/bin/protoc /usr/local/bin/protoc
  1. 检查是否有效
protoc --version

【讨论】:

    【解决方案3】:

    如果您在这里寻找如何在 Mac 上安装 Protocol Buffers,可以使用 Homebrew 通过运行以下命令来完成

    brew install protobuf
    

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

    如果您想安装旧版本,请在软件包页面Protobuf Package - Homebrew 中查找可用版本并安装该特定版本的软件包。

    此包中最旧的可用 protobuf 版本是 v3.6.1.3

    【讨论】:

    • 但是OP特别要求安装旧版本。
    【解决方案4】:

    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

    【讨论】:

      【解决方案5】:

      适用于 v3 用户。

      http://google.github.io/proto-lens/installing-protoc.html

      PROTOC_ZIP=protoc-3.7.1-osx-x86_64.zip
      curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/$PROTOC_ZIP
      sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
      sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
      rm -f $PROTOC_ZIP
      

      【讨论】:

        【解决方案6】:

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

        在尝试之前完全阅读它。

        步骤如下:

        打开终端并输入以下内容

        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 版本。 如果您想安装其他版本/平台,请访问releases link 并查看最新版本的详细信息,并使用这些信息。 Reference

        【讨论】:

        • 漂亮而简单。谢谢! :tada:
        【解决方案7】:

        安装Protocol Buffer(截至今日版本v3.7.0)

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

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

        现在你可以走了??

        (可选)还有一个包含文件,你可以添加。这是 README.md 的 sn-p

        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
        

        【讨论】:

          【解决方案8】:

          您可以从googlehttp://google.github.io/proto-lens/installing-protoc.html提供的官方链接页面安装

          【讨论】:

            【解决方案9】:

            来自https://github.com/paulirish/homebrew-versions-1。为我工作!

            brew install https://raw.githubusercontent.com/paulirish/homebrew-versions-1/master/protobuf241.rb
            

            【讨论】:

            • 注意,从未知来源安装时,始终建议扫描公式。我这样做了,很安全。
            【解决方案10】:

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

            虽然 protobuf 可能在线级别兼容,但它在生成的 java 类级别绝对不兼容:您不能将 protoc 2.4 生成的 .class 文件与 protobuf-2.5 JAR 等一起使用。这个这就是为什么更新 protobuf 版本在 Hadoop 堆栈中是一个如此敏感的话题:它总是需要跨不同项目进行协调,而且非常痛苦,没有人喜欢这样做。

            【讨论】:

              【解决方案11】:
              brew install --devel protobuf
              

              如果它告诉您“已安装 protobuf-2.6.1”: 1.brew uninstall --devel protobuf 2.brew link libtool 3.brew install --devel protobuf

              【讨论】:

                【解决方案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 &lt;istream&gt; 并再次执行 $ make,应该不会出现错误。之后做$ sudo make install。安装完成后$protoc --version 应该会显示正确的结果。

                【讨论】:

                • 这在 macOS Catalina 中对我有用!为我节省了几个小时,谢谢!
                【解决方案13】:

                新的一年,Homebrew 中的protobuf 版本与最先进的版本之间出现了新的不匹配。截至 2016 年 2 月,brew install protobuf 将为您提供 2.6.1 版本。

                如果您想要 3.0 beta 版本,您可以安装它:

                brew install --devel protobuf
                

                【讨论】:

                  【解决方案14】:

                  我用过macports

                  sudo port install protobuf-cpp
                  

                  【讨论】:

                    【解决方案15】:

                    在 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

                    【讨论】:

                    • 嘿,我试过这个,但是在 protoc --version 我得到 -bash: protoc: command not found
                    • 版本 2.4.1 安装在“/usr/local/Cellar/protobuf241/2.4.1”,你应该只创建一个“../2.4.1/protoc”的符号链接并把它在“/usr/local/bin”中。尝试比“protoc --version” 并且应该完全按照它应该的方式工作。
                    • 那个水龙头不可用了
                    • 不再工作了。我得到Warning: homebrew/versions was deprecated. This tap is now empty as all its formulae were migrated.
                    • 它已经迁移到核心,改用这个:brew tap homebrew/homebrew-core