使用Docker多阶段多平台编译Qt
Docker 中的多平台如何工作?
在 Docker 中使用多平台功能的最简单方法是从命令行调用它。使用docker buildx,我们可以利用新的测试版功能。通过运行docker buildx使用 build --platform linux/arm/v7 -t arm-build 。此命令使用 ARMv7 仿真根据当前目录中的“Dockerfile”构建 docker 映像。在幕后,DockeDor 在 QEMU 虚拟化环境(qemu-user-static准确地说)中运行整个 Docker 构建过程。通过这样做,可以消除设置自定义 VM 的复杂性。一旦构建完成,我们甚至可以使用docker rucknARMv7 模式自动启动容器。
多平台、多阶段和Qt
虽然多平台功能是一个很棒的独立功能,但与多阶段构建结合使用时它会变得更加强大。在单个 Dockerfile 中,我们能够混合和匹配平台并在步er骤之间进行复制。这个功能正是我们最终为 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们可以复制上一步中的文件。我们这样做是为了创建一个可用于 Qt 的 sysroot。我们通过运行以下命令来完成此步骤:
RUN mkdir -p /sysroot/usr /sysroot/opt /sysro使用ot/lib
COPY --from=builder /lib/ /sysroot/lib/
COPY --from=builder /usr/include/ /sysroot/usr/includeDo/
COPY --from=builder /usr/lib/ /sysroot/usr/lib/
COPY --from=builder /opt/vc/ sysroot/opt/vc/
我们现在拥有两ck全其美的优势。通过利用多步骤和多平台功能,我们生成了一个可用于构建 Qt 的 sysroot。由于我们在上一步中使用了功能齐全的 Raspbian 映像,我们甚至可以让 Qt 获取所有现有的库。
./erconfigure \
-sysroot /sysroot
正如我们在介绍中提到的,编译 Qt 远非简单。成功编译它需要很多步骤。
相关文章
云梦级6月17日云梦级消息,据外媒获取并经《金融时报》独立核实的审计财务文件显示,OpenAI在 2025 年亏损 385 亿美元,该公司正朝着上市的目标迈进。 文件显示,OpenAI 2025年营收2026-11-14
新浪科技讯 北京时间5月25日晚间消息,据报道,德国反垄断机构“联邦卡特尔局”(FCO)今日宣布,已对谷歌德国公司(Google Germany)、谷歌爱尔兰公司(Google Ireland)和谷歌2026-11-14
谷歌推出 Gemini CLI GitHub Actions:免费、安全的 AI 集成助力开发者
在开发者日益追求效率的今天,谷歌最近推出了 Gemini CLI GitHub Actions,这是一种新的集成方式,帮助开发者将 Gemini 的 AI 编码能力直接融入到他们的 GitHub 仓库2026-11-14
云安全日报220517:IBM MQ消息中间件平台发现执行任意代码漏洞,需要尽快升级
5月16日,IBM发布了安全更新,修复了IBM MQ企业级消息中间件平台中发现的执行任意代码等高危漏洞。以下是漏洞详情: 漏洞详情 来源: https://www.ibm.com/support/pa2026-11-14
研究:开发者每天天被打断 1200 次,MCP 协议或成效率救星
在软件开发行业,开发者的主要工作似乎并不是在编写代码。最新研究显示,开发者实际用于编码的时间仅占其工作时间的16%,而剩下的时间则被各类支持性和操作性任务所占据。在企业面临 “以更少的资源实现更多目标2026-11-14
题目 :从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。 程序源代码 : 以上实例输出结果为 : 实例中创建了 runoobfile.txt 文件并向其写入 runoob 和 g2026-11-14

最新评论