【问题标题】:Using grpc with QtCreator, undefined reference to `grpc::...`将 grpc 与 QtCreator 一起使用,未定义对 `grpc::...` 的引用
【发布时间】:2017-03-06 11:10:47
【问题描述】:

当我收到此编译器错误时,我正在尝试在 QtCreator 中用 C++ 编写一些代码以连接到grpc 服务器:

/some/path/serverproxy.cpp:40: error: undefined reference to `grpc::InsecureChannelCredentials()'

这是我的grpc 包括在serverproxy.cpp 的顶部

#include <grpc++/channel.h>
#include <grpc++/create_channel.h>
#include <grpc++/security/credentials.h>

错误来自这一行:

somenamespace::NewStub(
        grpc::CreateChannel("someaddress",
                            grpc::InsecureChannelCredentials()))};

我尝试在 QtCreator 中添加现有文件并添加这些标头(尽管必须手动为所有外部库的标头执行此操作会很奇怪),但它不起作用。它们位于/usr/local/include/grpc++/**/*.h。 还尝试将INCLUDEPATH += /usr/local/include 添加到我的.pro 文件中。

我还尝试清理项目,运行 qmake 并再次构建。

我必须做什么才能使用这些grpc++ 函数?

【问题讨论】:

  • 我认为这个问题没有正确结束。在这种特定情况下,您可以将pkg-config --libs grpc protobufpkg-config --cflags grpc protobuf 的输出添加到编译器选项中。同样在我的情况下,另一个库需要grpc++_unsecure,可能是因为我使用了不安全的通道。为简单起见,我建议您使用官方示例的CMakeList.txtcommon.cmake。请注意,您需要将PKG_CONFIG_PATH 设置为指向已安装grpc 的package 文件夹才能使用之前的命令。

标签: c++ qt qt-creator grpc


【解决方案1】:

我看了这么多undefined reference in qtcreator 线程却没有注意到这一点,我终于看到了here,这就是摆脱undefined reference 错误的原因:

您正面临链接错误。只需在您的 .pro 中添加您的路径 lib 及其名称:

LIBS += -L&lt;path_to_the_lib&gt; -l&lt;libName&gt;

具体来说

LIBS += -L/usr/local/include/grpc++ -lgrpc++

【讨论】:

  • 我知道这已经很老了,但是您是否还记得是否在 .pro 文件中添加了其他内容?简单地添加上面的行并不能完全解决我的问题。
  • 很遗憾我没有,但我记得我的这个解决方案确实有一些不好的地方,就是对这些事情如何工作的误解。有一些更清洁的方法可以做到这一点
  • 感谢您的回复。我能够弄清楚为什么添加这行代码在我的系统上无法正常工作。我将 grpc++ 编译为静态库而不是共享库。我用-DBUILD_SHARED_LIBS=ON 运行cmake 来生成我需要的共享库文件。
猜你喜欢
  • 2020-07-12
  • 2021-08-07
  • 2022-08-07
  • 2021-11-13
  • 2019-08-03
  • 2022-01-20
  • 2017-01-25
  • 1970-01-01
  • 2015-11-03
相关资源
最近更新 更多