将 grpc 与 QtCreator 一起使用,未定义对 `grpc::...` 的引用

Posted

技术标签:

【中文标题】将 grpc 与 QtCreator 一起使用,未定义对 `grpc::...` 的引用【英文标题】:Using grpc with QtCreator, undefined reference to `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 文件夹才能使用之前的命令。 【参考方案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 来生成我需要的共享库文件。

以上是关于将 grpc 与 QtCreator 一起使用,未定义对 `grpc::...` 的引用的主要内容,如果未能解决你的问题,请参考以下文章

将 gRPC 与 Electron 14 一起使用

将 QtCreator 2.7.0 与 OpenCV 2.4.5 一起使用

如何将 Windows SDK 与 Qt Creator 一起使用

将 Qt Creator 与 Microsoft 工具链一起使用时是不是存在严重问题? [关闭]

如何使 qtcreator 与 c++11 一起工作

Google的Container OS可以与Compute Engine上的gRPC一起使用吗?