交叉编译

概述

Open Robotics 为多个平台提供了预构建的 ROS 2 软件包,但许多开发人员仍然依赖 交叉编译,原因如下: - 开发机器与目标系统不匹配。 - 针对特定核心架构调整构建(例如,为 Raspberry Pi3 构建时设置 -mcpu=cortex-a53 -mfpu=neon-fp-armv8)。 - 针对除 Open Robotics 发布的预构建图像支持的文件系统以外的文件系统。

它是如何工作的?

交叉编译简单软件(例如,不依赖外部库)相对简单,只需要使用交叉编译器工具链而不是本机工具链。

有许多因素使这个过程更加复杂: - 正在构建的软件必须支持目标架构。特定于架构的代码必须根据目标架构在构建过程中正确隔离和启用。示例包括汇编代码。 - 在对使用它们的目标软件进行交叉编译之前,所有依赖项(例如库)都必须存在,无论是作为预构建的还是交叉编译的包。 - 在使用构建工具(例如 colcon)构建软件堆栈(而不是独立软件)时,构建工具应提供一种机制,允许开发人员在堆栈中每个软件使用的底层构建系统上启用交叉编译。

替代方案

交叉编译的替代方法是使用 docker buildx`` 构建多平台 Docker 映像 <https://github.com/docker/buildx#building-multi-platform-images>`__。