我想在我的qt项目上实现GRPC,但首先我尝试运行一个grpc示例,但我得到了未定义引用错误。
main.cpp:
#include <helloworld.grpc.pb.h>
#include <grpc/grpc.h>
#include <grpcpp/server_builder.h>
#include <iostream>
class GreeterService final : public helloworld::Greeter::Service {
public:
virtual ::grpc::Status SayHello(::grpc::ServerContext* context, const ::helloworld::HelloRequest* request, ::helloworld::HelloReply* response) {
std::cout << "Server: message for \"" << request->name() << "\"." << std::endl;
response->set_message("Hi " + request->name());
return grpc::Status::OK;
}
};
int main(int argc, char* argv[]) {
grpc::ServerBuilder builder;
builder.AddListeningPort("0.0.0.0:50051", grpc::InsecureServerCredentials());
GreeterService my_service;
builder.RegisterService(&my_service);
std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
server->Wait();
return 0;
}
. profile文件:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
INCLUDEPATH += /home/grpc/include \
/home/grpc/
DEPENDPATH += /home/grpc//include \
/home/grpc/
QMAKE_LFLAGS += -Wl,-rpath,"path_to_libgrpc++.so.1.45"
LIBS += -L/usr/local/lib `pkg-config --libs protobuf grpc++` -L/usr/lib -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
错误:
undefined reference to `helloworld::Greeter::Service::Service()'
我不知道为什么我得到这个错误,compailer可以看到标题主要也可以看到。但我认为有丢失的东西在我的.pro文件
1条答案
按热度按时间qyyhg6bp1#
您看到的错误很可能是由于您没有正确链接到gRPC库。
这将告诉链接器针对gRPC C++库进行链接,该库包括您尝试使用的helloworld::Greeter::Service类。
将/path/to/libgrpc . so替换为系统上libgrpc.so库的实际路径。
将这些行添加到.pro文件后,请尝试重新生成项目。这应该可以解决未定义引用错误。