Kaz*_*zik 1 c++ cmake cross-compiling grpc
我正在尝试使用cmake交叉编译gRPC。
我实际上做到了。不幸的是,我的方法涉及修补CMakeLists.txt。
问题是,当我尝试编译gRPC时,它使用的是他刚刚编译的protobuffer。它无法在x86计算机上运行ARM编译的可执行文件。
我设法通过在gRPCs主CMakeLists.txt中手动指定protoc和grpc_cpp_plugin的路径来编译它。它很脏,并且由于我想将gRPC作为子模块包括在内,因此我需要一种干净的方法来完成它。
有没有人设法使用cmake交叉编译gRPC?
这种方法应该起作用:
交叉编译Protobuf for target(ARM)并安装。
确保可以在您拥有的工具链(ARM)中搜索交叉编译的Protobuf。例如,它已安装到sysroot下的system-default前缀中。
在主机上,安装相同版本的 Protobuf 。它不必是可搜索的(也就是说,用户本地安装就足够了)。
使用以下参数交叉编译gRPC(在CMake GUI中设置或作为可执行文件的-D
选项设置cmake
):
protoc
可执行文件的路径>将参数设置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可执行文件,而是从参数中获取它。