使用cmake交叉编译gRPC

问题描述 投票:1回答:1

我正在尝试使用cmake交叉编译gRPC。

我实际上设法做到了。不幸的是,我的方法涉及修补CMakeLists.txt。

问题是,当我试图编译gRPC时,它正在使用他刚刚编译的protobuffer。它无法在x86机器上运行ARM编译的可执行文件。

我设法通过在gRPCs主CMakeLists.txt中手动指定protoc和grpc_cpp_plugin的路径来编译它。它很脏,因为我想将gRPC作为子模块包含在内,我需要干净的方法来完成它。

有没有人设法使用cmake交叉编译gRPC?

c++ cmake cross-compiling grpc
1个回答
3
投票

这种方式应该工作:

  1. 交叉编译Protobuf for target(ARM)并安装它。 确保可以在您拥有的工具链(ARM)中搜索交叉编译的Protobuf。例如。它安装在sysroot下的system-default前缀中。
  2. 在主机上,安装相同版本的Protobuf。它不需要是可搜索的(即,用户本地安装就足够了)。
  3. 使用以下参数交叉编译gRPC(在CMake GUI中设置或-D可执行文件的cmake选项): gRPC_PROTOBUF_PROVIDER:包 gRPC_PROTOBUF_PACKAGE_TYPE:MODULE Protobuf_PROTOC_EXECUTABLE:<主机protoc可执行文件的路径>

Explanations

将参数gRPC_PROTOBUF_PROVIDER设置为“package”会告诉gRPC不要构建自己的Protobuf,而是使用已经安装的变体。这个变种由find_package(Protobuf)搜索。

将参数gRPC_PROTOBUF_PACKAGE_TYPE设置为“MODULE”会告诉gRPC不要使用Protobuf安装提供的“Config”文件来检测Protobuf事物(库和可执行文件)。配置文件包含无法在外部调整的硬编码路径。相反,FindProtobuf.cmake脚本用于查找Protobuf。

设置参数Protobuf_PROTOC_EXECUTABLE告诉FindProtobuf.cmake脚本不搜索Protobuf可执行文件,但从参数中获取它。

© www.soinside.com 2019 - 2024. All rights reserved.