【发布时间】:2018-08-17 13:28:35
【问题描述】:
我正在尝试动态链接 grpc greeting_client 示例。 我正在尝试使用 libgrpc++.so、libprotobuf.so.10、libgrpc.so.3、libgrpc++_reflection.so.1 文件进行链接。
我已将这些文件添加到我的 /usr/lib 目录中,现在我正在尝试为 greeting_client 生成可执行文件。
我使用的命令是:g++ hello.pb.o hello.grpc.pb.o greeting_client.o -L/usr/lib -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed -ldl -o greeting_client -L/usr/local/include/google/ -L/usr/local/include/grpc -L/usr/local/include/grpc++
错误:
/usr/bin/ld: cannot find -lgrpc++_reflection
collect2: error: ld returned 1 exit status
我在 /usr/lib 目录中有 grpc++_reflection 的 .so 文件。 我可能遗漏了一些关于动态链接的东西。能否请您指出如何为示例动态链接 grpc 库?
【问题讨论】:
-
在编译器参数中你必须添加 -I
-
但是common.h是和protobuf相关的头文件。你能告诉命令需要做哪些改变吗?
-
问题如下:编译器无法找出路径'google/protobuf/stubs/common.h'。该文件应该存在于您计算机中的某个位置,您应该通过添加 -I
告诉编译器 -
可以,但是SO只有protobuf的编译代码。这意味着头文件(.h)仍然需要存在,否则您的代码不知道如何调用protobuf的任何函数。因此,您不需要安装它,但您仍然需要计算机中的所有 .h 文件。
-
OP的问题在于链接器,而不是编译器,所以这些cmets实际上是不正确的。当代码编译时,他显然已经在正确的位置有了标题,只是没有链接。
标签: c++ protocol-buffers grpc