使用Docker多阶段多平台编译Qt
Docker中的多平台是如何工作的在Docker中使用多平台特性最简单的方法是从命令行调用它通过docker buildx,我们可以利用新的测试版特性运行docker buildx build—platform Linux/arm/V7—t arm—build该命令使用ARMv7仿真来基于当前目录中的Dockerfile构建docker映像在后台,Docker在QEMU虚拟化环境中运行整个Docker构建过程通过这样做,可以消除设置自定义虚拟机的复杂性一旦构建完成,我们甚至可以使用docker runARMv7模式自动启动容器
多平台,多阶段和Qt虽然多平台功能是一个很棒的独立功能,但是结合多阶段构建会变得更加强大在单个Dockerfile文件中,我们能够混合和匹配平台,并在步骤之间进行复制这个函数正是我们最终为OSE使用Qt构建过程所做的
第一阶段:手臂
多亏了巴莱纳的优秀人员,我们才能在第一阶段使用Raspbian基础图像。我们可以使用以下方法调用此步骤:
from—platform = Linux/arm/V7 balena lib/rpi—raspbian:Buster as Builder经过以上步骤,我们可以照常使用Docker,执行各种运行命令,比如安装包等注意,如果构建没有在ARMv7硬件上运行,这个容器将使用QEMU模拟运行在我们的例子中,我们使用命令来安装Qt构建依赖项上面的步骤也让我们完全不需要从rsync物理Raspberry Pi的磁盘映像或文件中复制文件
第二阶段:x86
一旦我们在ARM步骤中安装了依赖项,我们就可以切换到构建器的本机x86体系结构,以避免使用以下代码行进行模拟和交叉编译:
现在,我们进入有趣的部分切换到x86之后,我们可以复制上一步中的文件我们这样做是为了创建一个可以用于Qt的sysroot
运行mkdir—p/sysroot/usr/sysroot/opt/sysroot/lib
COPY—from = builder/lib//sysroot/lib/
COPY—from = builder/usr/include//sysroot/usr/include/
COPY—from = builder/usr/lib//sysroot/usr/lib/
copy—from = builder/opt/VC/sys root/opt/VC/我们现在拥有了两个世界的精华通过多步骤和多平台函数,我们生成了一个可以用来构建Qt的sysroot由于我们在上一步中使用了全功能的Raspbian映像,我们甚至可以让Qt获取所有现有的库
/configure —sysroot /sysroot正如我们在简介中提到的,编译Qt远非易事成功编译它需要很多步骤
郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。