跨平台编译¶
概述¶
Open Robotics 提供了适用于多个平台的预构建 ROS 2 包,但很多开发者仍然依赖于跨平台编译,原因如下:
- 开发机器与目标系统不匹配。
- 针对特定核心架构进行构建优化(例如,在为 Raspberry Pi3 构建时设置 -mcpu=cortex-a53 -mfpu=neon-fp-armv8)。
- 针对除 Open Robotics 发布的预构建镜像支持之外的文件系统进行构建。
如何工作?¶
跨编译简单的软件(例如,无需外部库的依赖)相对简单,只需使用交叉编译工具链代替原生工具链。
然而,这个过程会因为以下因素变得复杂: - 正在构建的软件必须支持目标架构。架构特定代码必须适当地隔离,并在构建过程中根据目标架构启用。示例包括汇编代码。 - 所有依赖项(例如,库)必须存在,要么作为预构建的包,要么是交叉编译的包,这要在使用它们的目标软件进行交叉编译之前。 - 使用构建工具(例如,colcon)构建软件堆栈(相对于独立软件),预期构建工具提供机制使开发人员能够启用每个软件栈所使用的基础构建系统的交叉编译。
替代方案¶
跨编译的一个替代方案是使用 docker buildx 构建多平台 Docker 镜像。