簡體   English   中英

QT qmake GRPC實現

[英]QT qmake GRPC implementation

我想在我的 qt 項目上實現 GRPC,但首先我嘗試運行一個 grpc 示例,但出現未定義的引用錯誤。

主.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;
}

。輪廓:

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 可以看到 headers main 也可以看到。 但我認為 my.pro 文件中缺少一些東西

您看到的錯誤可能是由於您沒有正確鏈接到 gRPC 庫。

要解決此問題,您需要確保鏈接到項目文件 (.pro) 中的 gRPC 庫。 您可以通過將以下行添加到您的 .pro 文件來執行此操作:

LIBS += -lgrpc++

這將告訴鏈接器鏈接到 gRPC C++ 庫,其中包括您嘗試使用的 helloworld::Greeter::Service 類。

如果庫不在標准庫搜索路徑中,您可能還需要指定庫的路徑。 您可以通過將以下行添加到您的 .pro 文件來執行此操作:

LIBS += -L/path/to/libgrpc++.so

將 /path/to/libgrpc++.so 替換為系統上 libgrpc++.so 庫的實際路徑。

將這些行添加到 .pro 文件后,嘗試重建項目。 這應該可以解決未定義的引用錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM