Установка буферов протокола Google на Mac


101

Я хотел бы установить старую версию Google Protocol Buffers (protobuf-2.4.1) на Mac с помощью командной строки терминала. Я пробовал с brew install protobuf, но установлена ​​последняя версия 2.5.0. Можно ли установить старую версию с терминала.

Спасибо


2
Почему вам нужна более старая версия? Они обратно совместимы, до тех пор , как вы регенерировать .pb.hи .pb.ccфайлы.
Кентон Варда

Я подумал, что лучше использовать старую версию, так как проект был собран с использованием 2.4.1. Но, как вы сказали, я восстановил два файла, и все работает нормально. Спасибо.
informatiker

Ответы:


146

При сборке protobuf 2.4.1 из исходников на Mac возникают некоторые проблемы. Есть патч, который тоже нужно применить. Все это содержится в формуле homebrew protobuf241, поэтому я бы посоветовал ее использовать.

Чтобы установить буфер протокола версии 2.4.1, введите в терминал следующее:

brew tap homebrew/versions
brew install protobuf241

Если у вас уже есть версия буфера протокола, которую вы пытались установить из исходного кода, вы можете ввести в терминал следующее, чтобы исходный код был перезаписан версией homebrew:

brew link --force --overwrite protobuf241

Убедитесь, что у вас установлена ​​правильная версия, набрав:

protoc --version

Он должен отобразить 2.4.1


2
Привет, я пробовал это, однако на protoc --version я получаю -bash: protoc: command not found
ramin

Версия 2.4.1 установлена ​​в "/usr/local/Cellar/protobuf241/2.4.1", вам просто нужно создать символическую ссылку "../2.4.1/protoc" и поместить ее в "/ usr / local / bin ". Попробуйте, чем "protoc --version", и он должен работать именно так, как должен.
Gyuri Majercsik

4
Этот кран больше не доступен
Михай Тодор

23
Больше не работает. Я получаюWarning: homebrew/versions was deprecated. This tap is now empty as all its formulae were migrated.
Ши-Мин Ли

1
он переместился в ядро, используйте вместо этого: brew tap homebrew / homebrew-core
Huy Hóm Hnh

70

Это не через заваривание, но конечный результат тот же.

  1. Загрузите protobuf-2.4.1 со страницы https://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz.
  2. Распакуйте файл tar.gz.
  3. $ cd ~ / Загрузки / protobuf-2.4.1
  4. $. / configure
  5. $ make
  6. $ сделать чек
  7. $ sudo make install
  8. $ какой протокол
  9. $ protoc --version

Шаги 4-7 взяты из файла README.txt из архива protobuf.


2
Я пробовал варить, но для последней версии protobuf (теперь 2.6.0) он легко компилируется из источников, используя точный список шагов выше. Это становится еще более полезным при попытке расширить стандартные определения прототипа (например, добавляя параметры поля путем расширения descriptor.proto), поскольку вам нужны исходные источники или иным образом необходимо ссылаться на путь Cellar в домашней версии установки (уродливо?) .
Necro

2
При запуске команды make я получил ошибки: сгенерировано 3 ошибки. make [2]: *** [message.lo] Ошибка 1 make [1]: *** [all-recursive] Ошибка 1 make: *** [все] Ошибка 2
Anandaraja_Srinivasan

Это решение, которое сработало для меня. Но посмотрите ответ Сяоци Чу, когда он столкнулся с ошибками во время make.
Амудхан

шаги 4-7 находятся в точке /protobuf/src/README.md, я бы хотел, чтобы она была README.mdв /protobufкаталоге
Кевин Чжао,

4
Это сработало для меня, единственное изменение заключается в том, что вам нужно загружать исходники с github.com/google/protobuf/releases
r00tt

34

Наступил новый год, и есть новое несоответствие между версией protobufв Homebrew и новейшей версией. По состоянию на февраль 2016 года brew install protobufвы получите версию 2.6.1.

Если вместо этого вам нужна бета-версия 3.0, вы можете установить ее с помощью:

brew install --devel protobuf

18

Если вы попали сюда, чтобы узнать, как установить протокол буферов на Mac, это можно сделать с помощью Homebrew, выполнив команду ниже

brew install protobuf

Он устанавливает последнюю доступную версию protobuf. Для меня, на момент написания, это установило v3.7.1

Если вы хотите установить более старую версию, найдите доступные на странице пакета Protobuf Package - Homebrew и установите эту конкретную версию пакета.

Самая старая доступная версия protobuf в этом пакете - v3.6.1.3.


1
Но ОП специально просит установить старую версию.
Химаншу Танвар,

13

С https://github.com/paulirish/homebrew-versions-1 . Работает для меня!

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

Ты спас мне день. Большое спасибо!
Deepankar Sarkar

Обратите внимание: при установке из неизвестных источников всегда рекомендуется просматривать формулы. Я сделал это, это было безопасно.
Агостон Хорват

12

По какой-то причине мне нужно использовать 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должен отображаться правильный результат.



6
brew install --devel protobuf

Если он сообщает вам, что «protobuf-2.6.1 уже установлен»: 1. brew uninstall --devel protobuf 2. brew link libtool 3.brew install --devel protobuf


2

FWIW., Последняя версия brew находится на protobuf 3.0 и не включает никаких формул для более старых версий. Это несколько «неудобно».

Хотя protobuf может быть совместим на уровне проводов, он абсолютно несовместим на уровне сгенерированных классов java: вы не можете использовать файлы .class, созданные с помощью protoc 2.4 с JAR-файлом protobuf-2.5 и т. Д. И т. Д. Вот почему обновление Версии protobuf - это такая деликатная тема в стеке Hadoop: она неизменно требует координации между различными проектами и достаточно травматична, чтобы никому это не нравилось.


2

Для установки 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

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
Это только для версии 3.7.1 в osx. Если вы хотите установить другую версию / платформу, перейдите по ссылке на выпуски, ознакомьтесь с подробностями последней версии и используйте эту информацию. Ссылка


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.