c++ - 如何解决 gRPC 生成文件中的编译错误?

标签 c++ cmake grpc

我正在使用 gRPC 创建客户端-服务器应用程序。到目前为止我还没有使用 TLS 加密。现在我想启用它,奇怪的是我收到了这个错误。至少对我来说,这是一个链接器错误。解决这个问题的最佳方法是什么? CLion 不会突出显示任何内容,因此我认为一切在语法上都没有问题,但在编译时出现了该错误。

/usr/bin/ld: CMakeFiles/projectname.dir/main.cpp.o: in function `grpc::SslServerCredentials(grpc::SslServerCredentialsOptions const&)':
/home/username/projectname/third_party/grpc/include/grpcpp/security/server_credentials.h:60: undefined reference to `grpc_impl::SslServerCredentials(grpc::SslServerCredentialsOptions const&)'
collect2: error: ld returned 1 exit status

这是我用来根据 gRPC 规范生成 C++ 代码的 makefile:

HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
SYSTEM ?= $(HOST_SYSTEM)
CXX = g++
CPPFLAGS += `pkg-config --cflags protobuf grpc`
CXXFLAGS += -std=c++11
ifeq ($(SYSTEM),Darwin)
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\
           -lgrpc++_reflection\
           -ldl
else
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\
           -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\
           -ldl
endif
PROTOC = protoc
GRPC_CPP_PLUGIN = grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`

PROTOS_PATH = ./

vpath %.proto $(PROTOS_PATH)

%.grpc.pb.cc: %.proto
    $(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<

%.pb.cc: %.proto
    $(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<

clean:
    rm -f *.o *.pb.cc *.pb.h

最佳答案

然后问题就这样解决了: 我必须将 CMakeLists.txt cmake 构建配置文件中的 target_link_libraries 下的 grpc++_unsecure 更改为 grpc++ 。 我一开始就忘记/没有想到这一点。

target_link_libraries(bita_server
        pqxx
        sodium
        protobuf::libprotobuf
#        grpc++_unsecure
        grpc++
        SQLiteCpp
        sqlite3
        pthread
        dl
        ${_PROTOBUF_LIBPROTOBUF}
)

关于c++ - 如何解决 gRPC 生成文件中的编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971252/

相关文章:

c++ - 为什么我可以使用 std 命名空间中的名称,即使我是 "using namespace std;"?

c - 如何使用cmake正确地将libgit2链接到C程序?

kubernetes - 具有 Kubernetes 中 gRPC 服务 key 的确定性路由

grpc - 由于连接被强制终止,使用 ngrok 测试 gRPC 失败

c++ - 带有指向可变模板模板参数的指针的类

python tesseract 获取没有 OCR 的行数

c++ - 与 OpenCV 3.0 捆绑在一起的 IPPCV 包是否包含所有可能的 ipp 相关改进以运行 OpenCV 函数?

go - 在 Go gRPC 处理程序中从客户端证书获取主题 DN

c# - 从 C : fputc and fwrite in C#? 转换

c++ - Cmake 如何知道 Ubuntu 系统上已安装的库?