使用Docker多阶段多平台编译Qt
Docker 中的多平台如何工作?
在 Docker 中使用多平台功能的最简单方法是从命令行调用它。使用docker buildx,我们可以利用新的测试版功能。通过运行docker buildx build --platform linux/arm/v7 -t arm-build 。此命令使用 ARMv7 仿真根据当前目录中的“Dockerfile”构建 docker 映像。在幕后,Docker 在 QEMU 虚拟化环境(qemu-user-static准确地说)中运行整个 Docker 构建过程。通过这样做,可以消除设置自定义 VM 的复杂性。一旦构建完成,我们甚至可以使用docker runARMv7 模式自动启动容器。
多平台、多阶段和Qt
虽然多平台功能是一个很棒的独立功能,但与多阶段构建结合使用时它会变得更加强大。在单个 Dockerfile 中,我们能够混合和匹配平台并在步骤之间进行复制。这个功能正是我们最终为 Screenly OSE 使用 Qt 构建过程所做的。
第一阶段:ARM
感谢Balena的优秀人员,我们能够在第一阶段使用 Raspbian 基础映像。我们可以使用以下方法调用此步骤:
FROM --platform=linux/arm/v7 balenalib/rpi-raspbian:buster as builder
在上述步骤之后,我们可以像往常一样使用 Docker 并执行各种RUN命令,例如安装包等。请注意,如果构建不是在 ARMv7 硬件上运行,则此容器正在使用 QEMU 模拟运行。在我们的例子中,我们使用命令来安装 Qt 构建依赖项。上述步骤还允许我们完全消除从磁盘映像(这是Qt Wiki建议的)或rsync物理 Raspberry Pi 的文件复制文件的需要。
第 2 阶段:x86
一旦我们在 ARM 步骤中安装了依赖项,我们就可以切换到构建器的原生 x86 架构以避免仿真,并使用以下行进行交叉编译:
FROM --platform=linux/amd64 debian:buster
现在,我们进入了有趣的部分。切换到 x86 后,我们可以复制上一步中的文件。我们这样做是为了创建一个可用于 Qt 的 sysroot。我们通过运行以下命令来完成此步骤:
RUN 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/ sysroot/opt/vc/
我们现在拥有两全其美的优势。通过利用多步骤和多平台功能,我们生成了一个可用于构建 Qt 的 sysroot。由于我们在上一步中使用了功能齐全的 Raspbian 映像,我们甚至可以让 Qt 获取所有现有的库。
./configure \
-sysroot /sysroot
正如我们在介绍中提到的,编译 Qt 远非简单。成功编译它需要很多步骤。
您可能也感兴趣:
官方微博/微信

每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。

想在手机上看科技资讯和科技八卦吗?
想第一时间看独家爆料和深度报道吗?
请关注TechWeb官方微信公众帐号:
1.用手机扫左侧二维码;
2.在添加朋友里,搜索关注TechWeb。
为您推荐
若每年生产37.5万辆 特斯拉Cybertruck现有订单需要4年才能完成
继福特之后 通用汽车宣布明年起接入特斯拉超级充电网络
投行看好iPhone 15及Vision Pro 已上调苹果股票目标价
特斯拉计划每年生产37.5万辆Cybertruck全电动皮卡
林志颖复出为小鹏“代言” 海报却出现特斯拉?官方回应:只是玩梗
比亚迪F品牌正式官宣定名“方程豹” 年内发布首款新能源硬派越野SUV
消息称字节跳动正在内部测试对话类AI项目
中国电信广东客服:受影响用户的接听电话功能逐步恢复
特斯拉股价实现九连涨 距离万亿市值还差近3000亿美元
更多
- 若每年生产37.5万辆 特斯拉Cybertruck现有订单需要4年才能完成
- 继福特之后 通用汽车宣布明年起接入特斯拉超级充电网络
- 投行看好iPhone 15及Vision Pro 已上调苹果股票目标价
- 特斯拉计划每年生产37.5万辆Cybertruck全电动皮卡
- 荷兰隐私监管机构出于担忧要求OpenAI提供更多信息
- 电动汽车充电桩厂商SK Signet美国首座工厂已建成 下月投入运营
- 三星电子将向现代汽车供应最新一代汽车芯片 用于车载信息娱乐系统
- 史上最小最便宜车型 沃尔沃推出全电动紧凑型SUV EX30
- 数据中心热衷于AI GPU供应多元化 AMD有望成最大受益者
- 特斯拉股价实现九连涨 距离万亿市值还差近3000亿美元