Установка буферов протокола Google на mac
Я хотел бы установить старую версию буферов протокола Google (protobuf-2.4.1) на mac с помощью командной строки терминала. Я пробовал с brew install protobuf, но установлена последняя версия 2.5.0. Можно ли установить старую версию с терминала.
спасибо
8 ответов:
есть некоторые проблемы с построением protobuf 2.4.1 из источника на Mac. Есть патч, который также должен быть применен. Все это содержится в Формуле homebrew protobuf241, поэтому я бы посоветовал ее использовать.
для установки буфера протокола версии 2.4.1 введите в терминал следующее:
brew tap homebrew/versions brew install protobuf241Если у вас уже есть версия буфера протокола, которую вы пытались установить из исходного кода, Вы можете ввести следующее в терминал, чтобы иметь исходный код перезаписано доморощенной версией:
brew link --force --overwrite protobuf241проверьте, что теперь у вас установлена правильная версия, введя:
protoc --versionОн должен показать 2.4.1
Это не квас, но конечный результат тот же.
- загрузите protobuf-2.4.1 из https://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
- извлечь tar.файл GZ.
- $cd ~ / Downloads / protobuf-2.4.1
- $./настроить
- $ make
- $make check
- $sudo make install
- долларов США, что protoc
- $protoc --version
шагов 4-7 из README.txt-файл из архива protobuf.
Это новый год и есть новый несоответствие версии
protobufв доморощенном и режущем крае выпуска. По состоянию на февраль 2016 года,brew install protobufдаст вам версию 2.6.1.Если вы хотите бета-версию 3.0 вместо этого, вы можете установить его с:
brew install --devel protobuf
по какой-то причине мне нужно использовать protobuf 2.4.1 в моем проекте на OS X El Capitan. Однако homebrew удалил 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; ^(Извините, я не знаю как прикрепить код, если код содержит "' )
если вы получаете ту же ошибку, пожалуйста, отредактируйте src / google / protobuf / message. cc, добавить
#include <istream>в верхней части файла и сделать$ makeснова и не должно быть никаких ошибок. После этого$ sudo make install. Когда установка завершена$protoc --versionдолжен показать правильный результат.
от 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 protobuf2.brew link libtool3.brew install --devel protobuf
FWIW., последняя версия brew находится на protobuf 3.0, и не включает в себя какие-либо формулы для более старых версий. Это несколько "неудобно".
хотя protobuf может быть совместим на уровне проводов, он абсолютно не совместим на уровне генерируемых классов java: вы не можете использовать .файлы классов, созданные с помощью протокола 2.4 с помощью protobuf-2.5 JAR и т. д. так далее. Вот почему обновление версий protobuf является такой чувствительной темой в стеке Hadoop: это неизменно требует координация между различными проектами, и это достаточно травматично, что никто не любит это делать.
Comments