grpc make не может найти протокол 3

Я установил grpc-java в соответствии с инструкциями на свой Mac (под управлением Mavericks). Это включало установку protobuf v3.0.0-alpha-2, что я и сделал:

$ which protoc
/usr/local/bin/protoc

$ /usr/local/bin/protoc --version
libprotoc 3.0.0

Примеры Java работают нормально. Теперь я хотел бы попробовать примеры C ++ и, в идеале, попросить клиента C ++ поговорить с сервером Java и наоборот.

Я клонировал grpc и попытался его установить. sudo make install и, впоследствии, make verify-install терпят неудачу, сообщая мне, что protobuf 3 не установлен:

$ make verify-install
We couldn't find protoc 3.0.0+ installed on your system. While this
won't prevent grpc from working, you won't be able to compile
and run any meaningful code with it.


Please download and install protobuf 3.0.0+ from:

   https://github.com/google/protobuf/releases

Once you've done so, or if you think this message is in error,
you can re-run this check by doing:

   make verify-install

В строке 259 файла grpc / Makefile я вижу этот тест:

PROTOC_CHECK_CMD = protoc --version | grep -q libprotoc.3

Если я запускаю protoc --version на своем Mac, я вижу что-то другое (см. Выше), поэтому я попытался изменить строку выше на

PROTOC_CHECK_CMD = protoc --version | grep -q 'libprotoc 3.0.0'

Однако я получаю ту же ошибку от make verify-install.

Я также попытался удалить тесты PROTOBUF_CHECK_CMD и PROTOC_CHECK_CMD в run_dep_checks (о строке № 895), но установка по-прежнему не выполняется с той же ошибкой.

Когда я запускаю make на grpc-common / cpp / helloworld, он строит, но оба greeter_client и greeter_server терпят неудачу:

$ ./greeter_server
E0310 17:38:23.349841000 140735186797328 server.c:617] assertion failed: grpc_is_initialized() && "call grpc_init()"
Abort trap: 6

Я предполагаю, потому что проблема с установкой grpc.

Итак, protobuf 3 явно установлен. Как я могу убедить Makefile в этом или хотя бы обойти этот тест?


person Thad    schedule 10.03.2015    source источник
comment
Сообщение об отсутствии протокола не является ошибкой сборки, а просто информационным. Обратите внимание, что в нем говорится, что это не помешает работе grpc.   -  person murgatroid99    schedule 11.03.2015
comment
Эта исходная команда grep должна работать. grep использует регулярные выражения, поэтому . соответствует любому символу и выполняет сопоставление подстроки, поэтому он должен соответствовать libprotoc 3 части строки версии. В любом случае это не должно быть проблемой. Если бы это было так, Makefile в примере C ++ helloworld не удалось бы.   -  person murgatroid99    schedule 11.03.2015


Ответы (2)


Сообщение о протоколе, которое вы видите, не означает, что make не удалось. Это просто предупреждение. Вы успешно установили gRPC и успешно построили пример hello world.

Пример не работает на Mac из-за ошибки в gRPC, которая в настоящее время исследуется в этой проблеме GitHub < / а>.

person murgatroid99    schedule 11.03.2015
comment
Да, я обменялся электронными письмами по этому поводу с Николасом Ноблом на groups.google.com/ forum / #! forum / grpc-io сегодня. Я вижу, что есть запрос на перенос, чтобы исправить проблему с Makefile. - person Thad; 12.03.2015

Проблема в том, что sudo make install установил протокол под /usr/local/bin, но grpc смотрит под /usr/bin. Попробуйте настроить protobuf, используя:

./configure --prefix=/usr

Это установит двоичный файл протокола в место, ожидаемое grpc. Когда вы выполняете sudo make install на grpc, sudo правильно найдет протокол. Вы можете убедиться, что sudo видит это, с помощью этой команды:

sudo which protoc
sudo sh -c 'echo $PATH'

Обратите внимание, что sudo echo $PATH не сообщает вам, где находится путь sudo.

person Brian Matthews    schedule 16.04.2015