【问题标题】:grpc make can't find protoc 3grpc make 找不到 protoc 3
【发布时间】: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 就不会成功。

标签: macos grpc


【解决方案1】:

您看到的有关 protoc 的消息并不表示 make 失败。这只是一个警告。您成功安装了 gRPC 并成功构建了 hello world 示例。

由于 gRPC 中的一个错误,该示例无法在 Mac 上运行,该错误目前正在this GitHub issue 中进行调查。

【讨论】:

【解决方案2】:

问题是sudo make install 将协议安装在/usr/local/bin 下,但grpc 看起来在/usr/bin 下。 尝试使用以下方式配置 protobuf:

./configure --prefix=/usr

这会将 protoc 二进制文件安装在 grpc 所期望的位置。当您在 grpc 上执行 sudo make install 时,sudo 会正确找到 protoc。 您可以使用以下命令验证 sudo 是否看到它:

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

请注意,sudo echo $PATH 不会告诉您 sudo 的路径在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2019-03-26
    • 2021-02-25
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多