在Mac上安装Google Protocol Buffers

我想使用terminal命令行在mac上安装旧版本的Google Protocol Buffers(protobuf-2.4.1)。 我尝试了brew install protobuf ,但已经安装了最新版本2.5.0。 是否有可能从terminal安装旧版本。

谢谢

在Mac上build立protobuf 2.4.1有一些问题。 还有一个补丁也必须应用。 所有这些都包含在自制的protobuf241公式,所以我build议使用它。

要安装协议缓冲区版本2.4.1,请在terminal中input以下内容:

 brew tap homebrew/versions brew install protobuf241 

如果您已经有一个协议缓冲区版本,您尝试从源代码安装,您可以键入以下内容到terminal,以覆盖自制软件版本的源代码:

 brew link --force --overwrite protobuf241 

通过input以下内容检查您是否安装了正确的版本:

 protoc --version 

它应该显示2.4.1

这不是通过酿造,但最终的结果是一样的。

  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. $。/configuration
  5. $化妆
  6. $ make check
  7. $ sudo make install
  8. $哪个protoc
  9. $ protoc –version

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

这是一个新的一年,Homebrew中的protobuf和前沿版本之间有一个新的不匹配。 截至2016年2月, brew install protobuf会给你2.6.1版本。

如果您想要3.0 beta版本,您可以将其安装在:

 brew install --devel protobuf 

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

在make过程中,我得到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; ^ 

我用了macports

 sudo port install protobuf-cpp 

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

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

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

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

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