将 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 protobuf
和pkg-config --cflags grpc protobuf
的输出添加到编译器选项中。同样在我的情况下,另一个库需要grpc++_unsecure
,可能是因为我使用了不安全的通道。为简单起见,我建议您使用官方示例的CMakeList.txt
和common.cmake
。请注意,您需要将PKG_CONFIG_PATH
设置为指向已安装grpc 的package
文件夹才能使用之前的命令。
【参考方案1】:
我看了这么多undefined reference in qtcreator
线程却没有注意到这一点,我终于看到了here,这就是摆脱undefined reference
错误的原因:
您正面临链接错误。只需在您的 .pro 中添加您的路径 lib 及其名称:
LIBS += -L<path_to_the_lib> -l<libName>
具体来说
LIBS += -L/usr/local/include/grpc++ -lgrpc++
【讨论】:
我知道这已经很老了,但是您是否还记得是否在 .pro 文件中添加了其他内容?简单地添加上面的行并不能完全解决我的问题。 很遗憾我没有,但我记得我的这个解决方案确实有一些不好的地方,就是对这些事情如何工作的误解。有一些更清洁的方法可以做到这一点 感谢您的回复。我能够弄清楚为什么添加这行代码在我的系统上无法正常工作。我将 grpc++ 编译为静态库而不是共享库。我用-DBUILD_SHARED_LIBS=ON
运行cmake 来生成我需要的共享库文件。以上是关于将 grpc 与 QtCreator 一起使用,未定义对 `grpc::...` 的引用的主要内容,如果未能解决你的问题,请参考以下文章
将 QtCreator 2.7.0 与 OpenCV 2.4.5 一起使用
如何将 Windows SDK 与 Qt Creator 一起使用