使用 cmake 交叉编译 gRPC
Cross compiling gRPC using cmake
我正在尝试使用 cmake 交叉编译 gRPC。
我真的做到了。不幸的是,我的方法涉及在 CMakeLists.txt 内部进行修补。
问题是,当我尝试编译 gRPC 时,它使用的是他刚刚编译的 protobuffer。它不能在 x86 机器上 运行 ARM 编译的可执行文件。
我设法通过在 gRPCs main CMakeLists.txt 中手动指定 protoc 和 grpc_cpp_plugin 的路径来编译它。它很脏,因为我想将 gRPC 作为子模块包含在内,所以我需要干净的方法来做到这一点。
有没有人设法使用 cmake 交叉编译 gRPC?
这种方式应该可行:
为目标(ARM)交叉编译Protobuf并安装它。
确保交叉编译的Protobuf可以在你的工具链(ARM)中被搜索到。
例如。它安装在 sysroot 下的系统默认前缀中。
在主机上,安装相同版本的Protobuf。它不需要可搜索(也就是说,用户本地安装就足够了)。
使用以下参数交叉编译 gRPC(在 CMake GUI 中设置或作为 cmake
可执行文件的 -D
选项):
- gRPC_PROTOBUF_PROVIDER: 包裹
- gRPC_PROTOBUF_PACKAGE_TYPE: 模块
- Protobuf_PROTOC_EXECUTABLE: <你的主机
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 可执行文件,而是从参数中获取它。
我正在尝试使用 cmake 交叉编译 gRPC。
我真的做到了。不幸的是,我的方法涉及在 CMakeLists.txt 内部进行修补。
问题是,当我尝试编译 gRPC 时,它使用的是他刚刚编译的 protobuffer。它不能在 x86 机器上 运行 ARM 编译的可执行文件。
我设法通过在 gRPCs main CMakeLists.txt 中手动指定 protoc 和 grpc_cpp_plugin 的路径来编译它。它很脏,因为我想将 gRPC 作为子模块包含在内,所以我需要干净的方法来做到这一点。
有没有人设法使用 cmake 交叉编译 gRPC?
这种方式应该可行:
为目标(ARM)交叉编译Protobuf并安装它。
确保交叉编译的Protobuf可以在你的工具链(ARM)中被搜索到。 例如。它安装在 sysroot 下的系统默认前缀中。
在主机上,安装相同版本的Protobuf。它不需要可搜索(也就是说,用户本地安装就足够了)。
使用以下参数交叉编译 gRPC(在 CMake GUI 中设置或作为
cmake
可执行文件的-D
选项):- gRPC_PROTOBUF_PROVIDER: 包裹
- gRPC_PROTOBUF_PACKAGE_TYPE: 模块
- Protobuf_PROTOC_EXECUTABLE: <你的主机
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 可执行文件,而是从参数中获取它。