c++ - 为什么grpc没有预编译的c++库

标签 c++ grpc

我正在尝试将 grpc 集成到 C++ 项目中。但我发现唯一的方法是下载所有源代码并自行编译。

有什么方法可以获取我可以链接的预编译 .so/.a 文件和适用于 Linux 的 grpc_cpp_plugin?

或者 c++ 不可能这样做,为什么?

最佳答案

如果您正在寻找预编译的 gRPC 库,您应该使用 vcpkg . 我还尝试交叉编译 gRPC,而不构建库本身。用vcpkg我很好地做到了这一点。 只需几个步骤即可进行设置:

  1. 从 GitHub 拉取 vcpkg 并按照说明进行设置
  2. 使用“./vcpkg install grpc”安装 grpc
  3. CMakeLists.txt 中的 CMAKE_TOOLCHAIN_FILE 设置为 vcpkg 文件夹中的“vcpkg.cmake”文件
  4. 将 gRPC 添加到您的 CMakeLists.txt

这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)

if(DEFINED ENV{VCPKG_ROOT})
    set(CMAKE_TOOLCHAIN_FILE $ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)
else()
    set(CMAKE_TOOLCHAIN_FILE "/path_to_vcpkg/scripts/buildsystems/vcpkg.cmake")
endif()

project(Foo)

find_package(gRPC CONFIG REQUIRED)

...

add_executable(${PROJECT_NAME} ${Bar})

target_link_libraries(${PROJECT_NAME} PRIVATE gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc_cronet)

在文件夹 path_to_vcpkg/packages/grpc_x64-PLATFORM/tools/grpc 中,您将找到适用于您平台的所有预编译 grpc 插件(还有 grpc_cpp_plugin)。

优点:

  • 易于设置
  • vcpkg 适用于所有常见平台
  • 如果不再需要某个包,您可以删除“path_to_vcpkg/packages”中的文件夹
  • 包含您需要的所有 gRPC 工具

缺点:

  • path_to_vcpkg/packages”文件夹在安装了一些包后变得相当大

关于c++ - 为什么grpc没有预编译的c++库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56794557/

相关文章:

firebase - 使用Cloud Endpoints和Firebase调用ESP时出现“409 Audience not allowed”错误

asp.net-core - 如何使用bloomRPC 调用.NET Core 3.0 gRPC 服务器应用程序?

c++ - 目标类不明确的 Dynamic_cast

c++ - 尽管 try-catch 异常仍泄漏到系统

hyperledger-fabric - 订购者的 Hyperledger Fabric 对等连接错误

json - 在 Go 中将带有枚举的 Protobuf3 转换为 JSON

java - grpc-java的bindableService问题

c++ - 如何在 std::map 中使用 boost::mutex 作为映射类型?

c++ - 如何更改由 QAction 信号触发的插槽内的光标

c++ - 遍历不同的对象