【问题标题】:How to dynamically link grpc library c++?如何动态链接grpc库c++?
【发布时间】: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


【解决方案1】:

经过一番研究,我找到了解决方案,问题是链接器正在寻找 libgrpc++_reflection.so 但我有 libgrpc++_reflection.so.14.0.0

快速破解是将 libgrpc++_reflection.so 符号链接到 libgrpc++_reflection.so 答案在于g++的-l选项,调用ld。如果您查看此命令的手册页,您可以这样做:

g++ -l:libgrpc++_reflection.so.14.0.0 [...]
or: g++ -lgrpc++_reflection.so [...] , 

如果你的库路径中有一个名为 libgrpc++_reflection.so 的符号链接

【讨论】:

    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多