【问题标题】:why there is no precompiled c++ library for grpc为什么 grpc 没有预编译的 C++ 库
【发布时间】:2019-06-27 15:40:46
【问题描述】:

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

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

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

【问题讨论】:

  • c++也不是不可能,但为什么不能自己构建呢?我以前从未使用过 GRPC,但我查看了他们的文档,这是对 make 的简单调用来编译源代码。
  • @BradyDean 因为它需要很多第三方依赖项。我不能只下载grpc的源代码。我正在尝试通过 git 子模块从 git 中签出并设置依赖项。它需要超过 1GB 的磁盘空间和很长的时间来下载它们。
  • 这可能是唯一的方法。构建后,将make install 运行到一个单独的目录并将其用作您自己的 GRPC 分发。之后删除构建文件即可。
  • 请参阅github.com/grpc/grpc/issues/18260 了解有关此问题的讨论。

标签: c++ grpc


【解决方案1】:

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

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

这是我的 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-plugin(还有 grpc_cpp_plugin)。 p>

优点:

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

缺点:

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

【讨论】:

    【解决方案2】:

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

    要回答这个问题,gRPC C++ 插件目前需要手动构建和安装,如下所述:https://grpc.io/blog/installation/

    这意味着目前没有预编译的 gRPC C++ 插件。

    【讨论】:

    • 我也看过这个。但是为什么官方不提供预编译版本,因为他们提供所有其他语言?
    • @user2669704 这有待猜测。可能有太多不同类型的系统和配置?
    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2016-02-18
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多