交叉编译
概述
- Open Robotics 为多个平台提供了预构建的 ROS 2 软件包,但许多开发人员仍然依赖 交叉编译,原因如下:
开发机器与目标系统不匹配。
针对特定核心架构调整构建(例如,为 Raspberry Pi3 构建时设置 -mcpu=cortex-a53 -mfpu=neon-fp-armv8)。
针对 Open Robotics 发布的预构建图像支持的文件系统以外的文件系统。
它是如何工作的?
交叉编译简单软件(例如,不依赖外部库)相对简单,只需要使用交叉编译器工具链而不是本机工具链。
有许多因素使此过程更加复杂: - 正在构建的软件必须支持目标架构。根据目标架构,必须在构建期间正确隔离和启用架构特定代码。示例包括汇编代码。 - 所有依赖项(例如库)必须存在,无论是作为预构建的还是交叉编译的包,然后才能使用它们的目标软件进行交叉编译。 - 使用构建工具(例如 colcon)构建软件堆栈(而不是独立软件)时,构建工具应提供一种机制,允许开发人员在堆栈中每个软件使用的底层构建系统上启用交叉编译。
替代方案
交叉编译的替代方法是 build multi-platform Docker images using docker buildx
.