【发布时间】:2015-03-10 21:46:43
【问题描述】:
我根据instructions 在我的Mac(运行小牛)上安装了grpc-java。这包括安装 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
在 grpc/Makefile 的第 259 行,我看到了这个测试:
PROTOC_CHECK_CMD = protoc --version | grep -q libprotoc.3
如果我在我的 Mac 上运行 protoc --version,我会看到一些不同的东西(见上文),所以我尝试将上面的行更改为
PROTOC_CHECK_CMD = protoc --version | grep -q 'libprotoc 3.0.0'
但是我从make verify-install 收到同样的错误。
我也尝试在 run_dep_checks 删除 PROTOBUF_CHECK_CMD 和 PROTOC_CHECK_CMD 测试(大约第 895 行),但安装仍然失败并出现同样的错误。
当我在 grpc-common/cpp/helloworld 上运行 make 时,它会构建,但是 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 相信这一点,或者至少绕过该测试?
【问题讨论】:
-
关于缺少 protoc 的消息不是构建失败,它只是提供信息。请注意,它说“这不会阻止 grpc 工作”。
-
原来的
grep命令应该可以工作。grep使用正则表达式,所以.匹配任何字符,并且它进行子字符串匹配,所以它应该匹配版本字符串的libprotoc 3部分。无论如何,这不应该是问题。如果是这样,C++ helloworld 示例中的 Makefile 就不会成功。